Android Lint扫描优化(一)

简介: 一.使用Lint工具栏 -> Analyze -> Inspect Code弹出窗的Custom scope可以选择对哪一指定部分进行扫描,whole project是整个项目,不太建议每次都扫描整个项目,因为太耗时了。

一.使用Lint

工具栏 -> Analyze -> Inspect Code

img_003413e42a8470804980f12b46a839ea.png

img_6ea33aee83af0b76ed425efe1c05f992.png

弹出窗的Custom scope可以选择对哪一指定部分进行扫描,whole project是整个项目,不太建议每次都扫描整个项目,因为太耗时了。

二.观察Lint的结果

初次扫描之后,会弹出一个显示扫描结果的窗口,比如我的扫描结果:


img_8e3a65507813904c1ceaa98f2db4ffbb.png

1万7个警告,尼玛我写的代码就这么糟糕吗,我这感觉要改到下个月都改不完啊,看到这么多的警告,先不要慌,首先要做的就是删除项目重新做,开玩笑的,先找下资料看看每一栏目录表示什么。

1. Accessibility意思是便利性的意思

具体什么意思我也不知道,然后点开发现都是这个提示


img_d0d4a6998a8db0d295ca5f4ee84c706f.png

这些都是针对ImageView和ImageButton的,说我缺少contentDescription这个参数,这属性是啥我也不知道,以前一直没用过,然后百度查看看。


img_f6246e00a2c17edbb4d19d27af321581.png

瞬间觉得很屌,这些都是我平时开发没有考虑过的,虽然这个警告对我来说影响不大,要用的话可以按教程来做,这里我就暂时先搞空的。

而这个也验证了“Accessibility”这个的含义,主要是要你提供一些遍历的警告。

优化优先级很低,我觉得可以直接忽略

2. Correctness 这是正确性的意思

也看看是哪里有问题才能推出这个目录具体的分类。点开后发现有很多栏


img_121d9e443c7c60b6b94b5818a8f0e6e6.png

其实如果写android比较多的话,就算英语不太好也大概知道是什么意思,比如第一个就是说Class没被注册到manifest中,那这个Class基本肯定是一个Activity

我发现是我的一个基类没注册,不知道为什么这会提示这个BUG。这个先不管,看我第2条,它报这个警告


img_97852654f4f1adcdcd99381a9d6a6b40.png

这个就有意思了,虽然目前没出错,但是按照它的说法去做肯定更安全,这也体现Lint的优化的好处,我们肯定是尽量消除警告的好,虽然有些警告并不影响运行的结果,但是消除这些警告肯定会更为安全些。

然后改了一下其它的,发现这个目录就是说你用的某个地方不太好,比如说版本旧,比如说多写了某些内容,比如说让你在设置字体大小时用sp不要用dp,它就会给你一些合理的修改方法,其实我并没有全部改完,就改了一半左右。

3.Internationalization 意思是国际化

我想它应该是一个标准化的意思。


img_171a741e229680d75e902b153595aa83.png

我这里有3个,第一个其实就是我在xml中直接写中文,它建议我用@String写到资源文件中。老铁,道理我都懂,我这378个地方,我要改要画时间啊,所以先把这个优先级降低,再看看第二个。

第二个Overlapping items in RelativeLayout意思是RelativeLayout的Item重叠,我结合了一下我的代码,它的意思就是说RelativeLayout中的元素可以会相互覆盖,比如说我这样的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:padding="10dp"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:id="@+id/tv_time"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:id="@+id/tv_order_num"
        android:layout_alignParentRight="true"
        />
</RelativeLayout>

一个在左一个在右,但是如果右边的TextView太长,会出现覆盖左边TextView。这个确实是一个写布局时大意的地方。
要防止这个事情发生,需要在第二个TextView加上

android:layout_toRightOf="@+id/tv_time"
android:gravity="right"

第三个是TextView连接显示的问题,就是我这样写

tvMoney.setText("¥" + data.act.discountAmount);

是不建议的,而是建议使用占位符,那什么是占位符呢,就是用@String文件来做,比如我这样

<string name="fetch_again">重新获取(%1$d秒)</string>

总的来说,这个目录就是建议你使用一些国际化的规范写法。总的来说优先级也不是很高,但是有时间的话还是建议改下,毕竟按规范写准没错。

4.Performance 性能的意思

可想而知这条目录的重要性和优先级肯定高。点开目录


img_c98b70aa51337284b58f3604b9a1bd70.png

我有差不多300个性能问题,看着都想哭。
点开每个目录,它有会有详细的英文解释,很容易就能看懂和推出哪里问题,看不懂百度翻译。
比如说第一条


img_88166850d7a1168cf7917e265050e111.png

它大概是说我这个 layout_width用0dp好过用match_parent,因为我用了layout_weight属性。说真的我不知道影响多大,但这里说了是性能相关,那么最好还是改了。

再比如说第二条,是因为我在自定义View的绘制过程中创建对象,所以它建议我不要这么做,确实,因为这些方法会经常被调用,在这些方法里面做创建对象的操作会创建出来一大堆对象,于是我把

lineViews = new ArrayList();

改成

lineViews.clear();

并把创建对象的操作写在外面,这个确实是我之前没那么认真注意到的一个问题。
其它的就不一一说了,那些解释都说得很清楚,主要是想说明这个Performance 的优先级很高,最好把里边涉及到的问题都改了。

然后我就再说说一些我这边会影响性能的细节
(1)嵌套权重会影响性能


img_527a62a694eb4d08694f4c31bce0307b.png

(2)设置背景时要注意overdraw,意思就是说这个的上一层背景已经设了这个背景,而这个也设相同的,就造成了overdraw

(3)注意一下这项,是关于Context内存泄漏的


img_7bc11094998636a974c1d17b0cd88cba.png

(4)未使用到的资源会影响性能,不过我不建议马上删除,我觉得在发布前删除比较好。


img_8c08fdc7723f6b431b6e00e6b78b7cd8.png

(5)无用布局不一定要无脑删


img_25f0d2c58921aaebed03d9d927fac87a.png

这个是说没用到的布局,但是有个地方很奇怪,就是我用了ScrollView , 虽然当前内容够一屏幕,我是为了防止不同机型而设置的,它也提示我这是多余的布局。

我目前碰到的就这些,不要看我性能这块有300个警告,其实有200多个都是多余的资源文件,真正严重的就十几二十个。

5.Security 安全的意思
img_292bb0ddfa627536bf731ae612ce04a3.png

我看了一下,警告的都是我拷贝的一些网上的代码,暂时看不懂是什么问题。

6.Usability 复用/适用 的意思
img_401aea2316935674095bd2e5d4710d8e.png

第一条是说我的Button很多相同,可以用style,这个优先级并不是这么高,第二个说我input类型和提示有误,这个我倒觉得不用管,第三个不是我写的代码,我不背锅,第四个说我Text的尺寸太小了


img_9f7a89622384750668203b2b61b6776e.png

说尺寸最好不要小于12sp,我只能说,太良心了,哥们你这都要警告我。

7.issues

有Lint标签的都看完了,发现还有很多是issues 标签的,我随便抽了一些出来看,也没看出有什么。

8.Imports

这个很容易理解,就是你在类中导入没有用到的资源,这个我觉得还是要处理一下好。

这里有个技巧,点击目录右键,选择Optimize Imports就能快速把整个项目多余的Imports给删除。


img_34e886e466921320c8fffed6ff98982d.png
9.Declaration redundancy

这个是声明冗余的意思。可以按照它的说明去更改,优先级的话我觉得一般,不是很高。

10.Spelling

这个是拼写,比较有意思的东西,你的命名不规范的话在单词下面都会画个灰色的波浪线。然而完全没影响,除了对强迫症的来说。

11.probable bugs

这个就是说你的代码中可能会出现BUG的地方,我认为这个目录的优先级很高,做好按照它的说明进行更改,比如我这个。

img_35ba8dd20655117cad5b73f53c87efaf.png

它就说我调用这个方法可能会产生空指针,所以我就必须在这块地方加个判断。

就暂时看这么多吧,我觉得重点就是Performance和Correctness ,然后开发时要注意一下国际化和拼写的问题,可能之前开发没太注意加上项目功能挺多,导致现在警告好多。

但是在使用过程中也发现Lint的功能挺强大的,能反应出很多代码中的问题,有助于开发,而且也不是很难,建议可以抽点时间优化下代码。

目录
相关文章
|
20天前
|
缓存 监控 Java
构建高效Android应用:从优化用户体验到提升性能
在竞争激烈的移动应用市场中,为用户提供流畅和高效的体验是至关重要的。本文深入探讨了如何通过多种技术手段来优化Android应用的性能,包括UI响应性、内存管理和多线程处理。同时,我们还将讨论如何利用最新的Android框架和工具来诊断和解决性能瓶颈。通过实例分析和最佳实践,读者将能够理解并实施必要的优化策略,以确保他们的应用在保持响应迅速的同时,还能够有效地利用系统资源。
|
26天前
|
调度 数据库 Android开发
构建高效Android应用:Kotlin协程的实践与优化
在Android开发领域,Kotlin以其简洁的语法和平台友好性成为了开发的首选语言。其中,Kotlin协程作为处理异步任务的强大工具,它通过提供轻量级的线程管理机制,使得开发者能够在不阻塞主线程的情况下执行后台任务,从而提升应用性能和用户体验。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在实际的Android应用中有效地使用协程进行网络请求、数据库操作以及UI的流畅更新。同时,我们还将讨论协程的调试技巧和常见问题的解决方法,以帮助开发者避免常见的陷阱,构建更加健壮和高效的Android应用。
35 4
|
29天前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
1月前
|
API 数据库 Android开发
构建高效Android应用:探究Kotlin多线程优化策略
【2月更文挑战第14天】随着移动设备性能的日益强大,用户对应用程序的响应速度和流畅性要求越来越高。在Android开发中,合理利用多线程技术是提升应用性能的关键手段之一。Kotlin作为一种现代的编程语言,其协程特性为开发者提供了更为简洁高效的多线程处理方式。本文将深入探讨使用Kotlin进行Android多线程编程的最佳实践,包括协程的基本概念、优势以及在实际项目中的应用场景和性能优化技巧,旨在帮助开发者构建更加高效稳定的Android应用。
|
2月前
|
搜索推荐 安全 Android开发
如何优化安卓应用的用户体验
【2月更文挑战第9天】在当今移动互联网时代,安卓应用已成为人们日常生活中不可或缺的一部分。然而,用户对应用的使用体验越来越苛刻,一个不好的应用体验很容易导致用户的流失。本文将介绍如何从多个方面优化安卓应用的用户体验。
|
17天前
|
Java Android开发 开发者
构建高效Android应用:Kotlin协程的实践与优化
在响应式编程范式日益盛行的今天,Kotlin协程作为一种轻量级的线程管理解决方案,为Android开发带来了性能和效率的双重提升。本文旨在探讨Kotlin协程的核心概念、实践方法及其在Android应用中的优化策略,帮助开发者构建更加流畅和高效的应用程序。通过深入分析协程的原理与应用场景,结合实际案例,本文将指导读者如何优雅地解决异步任务处理,避免阻塞UI线程,从而优化用户体验。
|
1天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
11天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
26天前
|
缓存 前端开发 Android开发
构建高效Android应用:从设计原则到性能优化
随着移动设备成为我们日常生活不可或缺的一部分,开发一个流畅且响应迅速的Android应用变得至关重要。本文将探讨如何通过遵循Android设计原则和实施细致的性能优化策略来构建高效的Android应用程序。我们将深入分析应用架构的选择、内存管理的要点以及UI设计的优化,旨在为开发人员提供一套实用的指导方针,帮助他们提升应用的整体性能和用户体验。
|
29天前
|
监控 Java Android开发
构建高效Android应用:从内存管理到性能优化
【2月更文挑战第30天】 在移动开发领域,打造一个流畅且响应迅速的Android应用是每个开发者追求的目标。本文将深入探讨如何通过有效的内存管理和细致的性能调优来提升应用效率。我们将从分析内存泄露的根本原因出发,讨论垃圾回收机制,并探索多种内存优化策略。接着,文中将介绍多线程编程的最佳实践和UI渲染的关键技巧。最后,我们将通过一系列实用的性能测试工具和方法,帮助开发者监控、定位并解决性能瓶颈。这些技术的综合运用,将指导读者构建出更快速、更稳定、用户体验更佳的Android应用。