Android-Lint 常见问题分析

上一篇中简单介绍了一下Android Lint检测工具的使用,这里列举一些常见的检查结果分析:

1、HashMap can be replaced with SparseArray

      一般Key为int型时可以使用SparseArray替代HashMap使用,SparseArray是Android所独有的,其目的是为了更加节省内存资源

      好处2点:1、装载速度更快 2、消耗内存更小  

      缺点:如果是倒序插入值的时候 不建议使用SparseArray替代,因为会比正序插入转载时间多了大约10倍

2、Handler reference leaks
      在应用程序线程的MessageQueue中排队的Message对象 还保留他们的目标Handler。如果Handler是一个内部类(注:无论是匿名还是非匿名,匿名是比较常见用法),它的外部类将被保留(至于为什么, 请参考Java嵌套类相关说明)。为了避免泄漏外部类,声明一个Handler子类为静态内部类(注:这样就避免了Handler对象对外部类实例的自动引用),其内部持有一个对外部类对象的WeakReference。

总结:1、在onDestroy中使用mHandler.removeCallbacksAndMessages(null);清除该Handler为target的所有Message(包括Callback)
   2、Handler的实现类采用静态内部类的方式,避免对外部类的强引用,在其内部声明一个WeakReference引用到外部类的实例。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. static class MyHandler extends Handler {  
  2.       // WeakReference to the outer class's instance.  
  3.       private WeakReference<myactivity> mOuter;  
  4.   
  5.       public MyHandler(MyActivity activity) {  
  6.           mOuter = new WeakReference<myactivity>(activity);  
  7.       }  
  8.   
  9.       @Override  
  10.       public void handleMessage(Message msg) {  
  11.           MyActivity outer = mOuter.get();  
  12.           if (outer != null) {  
  13.               // Do something with outer as your wish.  
  14.           }  
  15.       }  
  16.   } 
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() calls

This 'Cursor' should be freed up after use with '#close()'

This 'TypedArray' should be recycled after use with '#recycle()'

6. Node can be replaced by a TextView with compound drawables

使用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 重复



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值