Android 性能优化之使用Lint
代码静态检查推荐:
(3)Android自定义Lint实践2——改进原生Detector
Lint 是 Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。
Lint工作方式简介
Lint 会根据预先配置的检测标准检查我们 Android 项目的源文件,发现潜在的 bug 或者可以优化的地方,优化的内容主要包括以下几方面:
Correctness:不够完美的编码,比如硬编码(国际化问题)、使用过时 API 等
Performance:对性能有影响的编码,比如:静态引用,循环引用等,
布局性能(以前是 layoutopt工具,可以解决无用布局、嵌套太多、布局太多、overdraw)
其他性能(如:draw/layout 时进行对象的声明等)
Internationalization:国际化,直接使用汉字,没有使用资源引用等
Security:不安全的编码,比如在 WebView 中允许使用 JavaScriptInterface 等
其他等等。
Lint 检测代码的过程如下图所示:

App 源文件:包括 Java 代码,XML 代码,图标,以及 ProGuard 配置文件等
lint.xml:Lint 检测的执行标准配置文件,我们可以修改它来允许或者禁止报告一些问题
Android Studio中使用Lint
Android Studio 中内置了 Lint,我们小手一点就可以直接使用。
Lint 的使用路径:工具栏 -> Analyze -> Inspect Code…
点击 Inspect Code 后会弹出检查范围的对话框:

默认是检查整个项目,我们可以点击 Custom scope 自定义检查范围。
点击右边的下拉框,会出现以下选择:

分别有:
Project Files:所有项目文件
Project Production Files:项目的代码文件
Project Test Files:项目的测试文件
OpenFiles:当前打开的文件
Module ‘app’:主要的 app 模块
Current File:当前文件
其他一些
除了内置的选项我们还可以自己选择特定的类进行检查,点击下图中的红色框部分:

会弹出自定义范围选择框,默认是空的,我们可以点击左上角的“+”号新增一个检查范围:

Local:只能当前项目使用
Shared:其他 Android Studio 项目也可以使用
我们选择 Shared,然后起个帅气的名字 “ShixinCuteLint”,默认按项目显示,这时检查的文件数为 0 :

上图中右边的四个按钮表示要操作的类型:
Include:包括当前文件夹内的文件,但不包括他的子文件夹
Include Recursively:包括当前文件夹以及它的子文件夹内所有的文件夹,递归添加
Exclude:移除当前文件夹,不包括子文件夹
Exclude Recursively:移除当前文件夹及所有子文件夹
我们点击左边的 app 文件夹后,点击右边的 Include Recursively 按钮,把 app 下的所有文件添加到检查列表:

可以看到,这时 app 下的文件都变绿了,总共有 689 个文件夹要扫描。
点击 OK 进行检测,稍等一会儿,会弹出 Inspection 对话框,显示检查结果,没想到我的代码居然有 1769 个警告!这数字触目惊心啊:

我们主要关注红框内的警告,先来看看我的代码 Performance 有什么问题:
我们主要关注红框内的警告,先来看看我的代码 Performance 有什么问题:


哈哈,没想到我还有这么多进步空间!
上图可以看到,Lint 真是神器,可以帮我们发现自己忽略或者没有意识到的问题,尤其是性能方面,如果你觉得自己代码想优化又不知道从何做起,不妨让 Lint 给你指指路。
团队建立代码规范利器
提升、降低问题的等级
虽然 Lint 可以帮我们检查代码的问题,但多人合作时,我们更期望可以在写代码时就发现问题、解决问题。
鉴于团队成员中水平良莠不齐,靠个人意识有时候很难保证质量,这时可以修改 Lint 对于特定问题的警告等级,以最直观的 IDE 提示来警醒成员。
Lint 的警告严重程度有以下几种:

Unused Entry:没有使用的属性,灰色,很不起眼
Typo:拼写错误,绿色波浪下划线,也不太起眼
Server Problem:服务器错误?好像不是
Info:注释文档,绿色,比较显眼
Weak Warning:比较弱的警告,提示比较弱
Warning:警告,略微显眼一点
Error:错误,最显眼的一个
日常开发中,好一点的程序员会关注 Warning 的警告,根据警告优化代码,但那也只是很少一部分。但是红色的 Error 就不一样了,基本上看到就想要消灭掉。
我们拿命名拼写错误举个例子。
类、对象、遍历拼写错误看起来不是什么问题,但是如果你见过大量的无意义或者错误命名,你一定会赞同我的接下来做法。
默认的拼写错误是 Typo ,提示很弱,所以常被人忽略:

上面的 String 类型变量 login 写成了 logn,Lint 默认对拼写错误是个下滑波浪线,很不起眼。我们修改一下。
打开 Preferences/Settings,搜索 Inspections,会出现 Lint 的检测配置页面:

要修改拼写的警告等级,搜索“spelling”:

然后选择出现的 Typo,再点击右边的 Severity 就是严重程度,改成 Error,OK。

可以看到,现在拼写错误就会出现红色的错误警告了,让你不好好写变量名!
Lint的禁用
Lint 报的某些警告的确是没必要,这时我们可以选择忽略这些警告。忽略警告可以分两种:
1. 在 Java 代码中
2. 在 XML 文件夹中
在 Java 代码中忽略 Lint 警告
忽略 Lint 警告的注解跟 @SuppressWarnings 很类似,@SuppressLint(“忽略的警告名称”)。
下面的代码演示了如何忽略 Lint 对使用新 API 的警告:

要是你不清楚要忽略的警告具体是什么名字,那就直接忽略 all,当然是当前类/方法/对象:
@SuppressLint("all")
在 XML代码中忽略 Lint 警告
只需两步:
1. xml 中声明 tools 命名空间
2. 使用 tools:ignore=”忽略的警告名”
例如:

Gradle配置Lint
Gradle 中也可以配置 Lint 的关键操作,比如是否开启 Lint 警告,或者关闭指定的警告。
在 module 下的 build.gradle 中添加 lintOptions{…}, 样例代码如下:

自动删除无用资源文件
代码迭代版本一多,很容易会遗留一些无用的代码、资源文件,我们可以使用 Lint 进行清除。
点击 Android Studio 工具栏 -> Analyze -> Run Inspection By Name..,输入要检测的内容,这里是无用资源:

然后选择 Unused resources,再选择范围后就开始检测。
检测出这么多无用文件:

注意,右边有解决方法:Remove All Unused Resources,放个大图显眼一点:

Android 性能优化之使用Lint的更多相关文章
- Android 性能优化:使用 Lint 优化代码、去除多余资源
前言 在保证代码没有功能问题,完成业务开发之余,有追求的程序员还要追求代码的规范.可维护性. 今天,以“成为优秀的程序员”为目标的拭心将和大家一起精益求精,学习使用 Lint 优化我们的代码. 什么是 ...
- Android性能优化典范第二季
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...
- Android性能优化之布局优化
最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...
- 【转】Android性能优化之布局优化篇
转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...
- Android性能优化典范(二)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- android app性能优化大汇总(google官方Android性能优化典范 - 第2季)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- Android性能优化典范 - 第2季
Google发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的缩放,缓 ...
- [Android 性能优化系列]降低你的界面布局层次结构的一部分
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- Android群英传笔记——第十章:Android性能优化
Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...
随机推荐
- 上传代码到github
上传代码前需配置连接秘钥和设置本地git账号密码. 1.检查上传文件目录状态 git status 2.将更改文件添加到缓存区 git add . 3.添加本次代码更改说明 git commit -m ...
- Linux命令--tree
目录 tree 最常用 带颜色显示2级目录 排除显示某个目录 tree tree -C :颜色显示 tree -f : 显示文件全路径 tree -L 2 :只显示2层 tree -P *.pl :只 ...
- 软件测试面试必问--bug交互流程
目前市场主要用的bug管理工具:禅道.jira.QC.bugfree等,当然也有自己公司开发的. 不过不管哪一种工具,核心交互流程都是差不多的,只是字段的名称不一样而已,参考如下两张示意图: 这是前几 ...
- 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS
在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...
- 各种手工DIY
http://www.guokr.com/scientific/subject/diy/ 高仿宜家莲花灯 http://www.guokr.com/article/179863/ 做一只会发光的魔幻吊 ...
- js 刷新父业面
window.opener.location.reload() 2个方法都是刷新父窗口,但是其中还是有奥妙的哦.window.opener.location.reload();这个方法在强迫父窗口的时 ...
- JAVA第三次实训作业
---恢复内容开始--- 1. 编写“学生”类及其测试类. “学生”类: 类名:Student 属性:姓名.性别.年龄.学号.5门课程的成绩 方法1:在控制台输出各个属性的值. 方法2:计算平均成绩 ...
- Lesson 2-2(列表,元组)
2.3 列表 2.3.1 列表的创建方法 --- 使用方括号 [] ,括号中的元素之间使用逗号隔开. >>> [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] > ...
- kali linux 网络配置
/etc/init.d/networking restart service newworking restart ifdown eth0 ifup eth0 ifconfig down eth0 i ...
- java爬虫实现爬取百度风云榜Top10
最近在项目中遇到了java和python爬虫进行程序调用和接口对接的问题, 刚开始也是调试了好久才得出点门道. 而后,自己也发现了爬虫的好玩之处,边想着用java来写个爬虫玩玩,虽说是个不起眼的dem ...