一.Lint工具的作用
Lint 工具可检查您的 Android 项目源文件是否包含潜在错误,以及在正确性、安全性、性能、易用性、便利性和国际化方面是否需要优化改进
二.在Android Studio中使用Lint
三.Lint检测出的关于性能的16种问题
DrawAllocation
原因:在布局或者绘制函数(measure/layout/drwa)中创建了对象。因为这些函数可能别频繁调用,如果在这些函数里面创建对象,可能导致垃圾回收线程中断
解决方法:
提前创建对象WakeLock
手机不能进入休眠,导致搞好点状态Recycle
原因:TypeArrays,VelocityTrackers等用完之后没有回收
解决方法:调用方法回收-
ObsoleteLayoutParam
原因 View使用了无效的布局参数
比如:LinearLayout的子View使用了在RelativeLayout中的属性<LinearLayout > <View android:centerInParent="true" ></View> </LinearLayout>
解决方法:去掉无用的参数
- UseCompoundDrawable
原因:出现了ImageView+TextView的布局
解决方法:建议将ImageView+TextView改成TextView+给TextView设置Drawable的形式 - HandlerLeak
参考
原因:Handler指向一个内部类,但是内部类隐式得持有外部类(Activity)的引用,而Handler又会被加入消息队列中不会被马上执行,这就导致了关闭Activity后,Handler没被销毁,Activty也没被销毁
解决方法:- Handler设置为静态内部类
- Handler中拥有一个Activity的弱引用,要使用Actvity时使用此弱引用。
- UseSparseArray
尽量使用SpareArray代替HashMap - UseValueOf
使用常量对象时,应该使用ValueOf而不是使用new,比如需要42的对象,应该使用Integer.valueOf(42)而不是new Integer(42)
public static Integer valueOf(int i)
返回一个表示指定的 int 值的 Integer 实例。如果不需要新的 Integer
实例,则通常应优先使用该方法,而不是构造方法 Integer(int),因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
- DisableBaseLineAlignment
当一个LinearLayout的作用只是给内嵌的布局分配空间,应该关闭掉baseLineAliged属性
比如:
<LinearLayout
android:gravity="center_vertical"
android:baselineAligned="false">
<RelativeLayout></RelativeLayout>
<RelativeLayout></RelativeLayout>
</LinearLayout>
- InefficientWeight
当一个LinearLayout里只有一个布局且此布局又有weight属性,需要将width或者height设置为0,省略mearsure的过程。
如下
<LinearLayout
android:gravity="center_vertical"
android:weightSum="4"
>
<RelativeLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="0dp"
></RelativeLayout>
</LinearLayout>
- FloatMath:使用FloatMath替换MAthena
- Netesed Weights
原因:
Layout weights require a widget to be measured twice. When a LinearLayout with non-zero weights is nested inside another LinearLayout with non-zero weights, then the number of measurements increase exponentially
解决方法:更改布局
- UnusedResoureces/UnuseEds:未使用的资源
解决方法:删除未使用的资源 - Overdraw
原因:给根布局设置一个背景,系统先试用主题的背景先绘制一遍背景再使用指定的背景,这时会发生Oberdraw
解决方法:取消theme的背景
注意:自己在Lint中未看见这个提示 - UselessLeaf/UselessParent
View或者View的Parent没有用
解决方法:去掉View或者View的Parent - UnusedNamespace
布局文件中没用的namespace
解决方法:去掉没用的namespace