上一篇中简单介绍了一下Android Lint检测工具的使用,这里列举一些常见的检查结果分析:
1、HashMap can be replaced with SparseArray
一般Key为int型时可以使用SparseArray替代HashMap使用,SparseArray是Android所独有的,其目的是为了更加节省内存资源
好处2点:1、装载速度更快 2、消耗内存更小
缺点:如果是倒序插入值的时候 不建议使用SparseArray替代,因为会比正序插入转载时间多了大约10倍
2、Handler reference leaks
mHandler.removeCallbacksAndMessages(
null
);
清除该Handler为target的所有Message(包括Callback)
- static class MyHandler extends Handler {
- // WeakReference to the outer class's instance.
- private WeakReference<myactivity> mOuter;
- public MyHandler(MyActivity activity) {
- mOuter = new WeakReference<myactivity>(activity);
- }
- @Override
- public void handleMessage(Message msg) {
- MyActivity outer = mOuter.get();
- if (outer != null) {
- // Do something with outer as your wish.
- }
- }
- }
3、Memory allocations within drawing code
onMeasure、onDraw 都是被频繁调用的方法,因此 Lint 不建议在其中执行 new 操作,可以在 onCreateView 等非频繁调用的时机进行 new 操作,并用成员变量保存,再在 onMeasure 中使用成员变量。
4. Missing baselineAligned attribute
当LinerLayout的子View都是ViewGroup(自定义控件除外)时,Lint认为它的子View已经不需要基准线对齐了,为了不让LinerLayout去做无用的计算对齐的操作,提出了如上警告,修改掉之后就可以提高性能。
5. Missing recycle() callsThis 'Cursor' should be freed up after use with '#close()'
This 'TypedArray' should be recycled after use with '#recycle()'
使用TextView的DrawLeft等属性来代替TextView和ImageView的结合使用
7. Obsolete layout params
废弃或无效的布局参数
8. Static Field Leaks静态变量泄露
9. Unused resources未使用的资源
10. Useless parent layout多余的父布局
11.Overdraw: Painting regions more than once
问题概述:如果在布局文件xml中的根布局中使用background属性,会和主题中的background产生重复绘制,导致了“overdraw”。在自定义主题中将background设置为null。因为不是每个界面的根布局都使用同一个背景 ,需要自己定义,所以最好在主题中处理(根据自己的项目中的情况来的)
12.Duplicate ids across layouts combined with include tags
layout布局文件 id 重复