安卓 lint分析笔记

1、关于

@SuppressWarnings("WrongConstant")

,禁止提示警告提示,

ide会对警示做高亮标识,这些地方有待修改以提高性能,如果实在不想处理它,就在响应的地方加上这句话来忽略提示,忽略提示加的位置可以是当前class,也可以是当前的方法或者语句,建议是精确到当前方法

100853_sSm0_2335739.png

 

2、Hardcoded reference to /sdcard

Do not hardcode "'/data/'"; use 'Context.getFilesDir().getPath()' instead

获取路径的时候,不同手机厂商的sd卡路径可能是不一样的,建议不使用硬编码的方式来指定,可以使用Context.getFilesDir().getPath()来替代

3、自定义控件,采用v7库的compatXXX控件来继承,考虑到更优的兼容性

4、Implied default locale in case conversion,出于国际化的需求,String.format,

  • To get local formatting use 'getDateInstance()', 'getDateTimeInstance()', or 'getTimeInstance()', or use 'new SimpleDateFormat(String template, Locale locale)' with for example 'Locale.US' for ASCII dates.

方法可以设置语言环境,如果没有国际化的打算,可以关闭此类提示,

5、inflate的使用,

LayoutInflater.from(this).inflate(
        R.layout.widget_recommend_stock_ad, null);
View.inflate(getContext(), headLayoutId, null);

第三个参数都带有null,这里的参数root的设置很关键,会影响到xml解析生成的view;如果设置成null即没有指定“根布局”的话,xml的最外层根布局设置的Android:layout_xxx等属性不会生效,因为android:layout_xxx等属性是在根布局中获得的,例如margin,如果外层布局没有设置相关属性可以使用以上方法,例如生成一个对话框

6、关于SharePreferences,最后提交的时候,可以使用commit或者apply,却别是commit是同步的方法,会返回一个布尔类型来判断此操作是否成功,会占用一点等待的时间,如果是用apply,这是异步的方法,不反馈操作是否成功,优点就是不占用主线程,如果对提交的结果没有确保成功的要求,推荐使用apply。

7、外层包裹了scrollview,内层的viewGroup建议使用'android:layout_height="wrap_content"',或者

 'android:layout_width="wrap_content"',根据scrollview的方向来定,这样scrollview有渲染的时候性能更佳

8 、重写view的onMesure,onLayout方法的时候,应该避免在方法内部使用new 关键字,因为new的开销比较大,这些方法涉及到渲染的过程,使用new会出现卡顿,建议在初始化的时候new,然后在onMesure,onLayout,onDraw方法里面引用属性。

 

9

  • This Handler class should be static or leaks might occur (anonymous com.guosen.kuanggong.widget.banner.CycleViewPagerHandler)

匿名内部类使用handler,如果里面执行耗时操作,并且当前窗口退出时,可能导致内存泄露,因为匿名内部类默认持有外部类的引用,垃圾回收机制在检测外部类时,发现其内部的handler还持有这个引用,就不执行回收操作了,方法有两个,一个是在destroy的时候调用一下removeCallbacksAndMessages(null)方法来清空消息队列,这样就立刻释放了持有引用,第二种就是通过弱引用的方式,

private static class MyHandler extends Handler {
    private final WeakReference<SampleActivity> mActivity;

    public MyHandler(SampleActivity activity) {
      mActivity = new WeakReference<SampleActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
      SampleActivity activity = mActivity.get();
      if (activity != null) {
        // ...
      }
    }
  }

 

10,数据量不超过1000个的时候,SparseArray<T> 替换 HashMap<int , T >

1,SparseArray的原理是二分检索法,也因此key的类型都是整型。

2,(HashMap和SparseArray比较)当存储大量数据(起码上千个)的时候,优先选择HashMap。如果只有几百个,用哪个区别不大。如果数量不多,优先选择SparseArray。

3,SparseArray有自己的垃圾回收机制。(当数量不是很多的时候,这个不必关心。)

 

11

  • Set 'android:baselineAligned="false"' on this element for better performance

使用LinearLayout的时候,如果内层只套一个viewgroup,就加上android:baselineAligned="false",因为linearlayout在渲染的时候,会计算基准线,关闭它可以提高一部分性能

12

使用Integer.valueOf()来代替 new Integer(),源码:

 public static Integer valueOf(int i) {
	final int offset = 128;
	if (i >= -128 && i <= 127) { // must cache 
	    return IntegerCache.cache[i + offset];
	}
        return new Integer(i);
    }

如果数字在-128到127,使用,缓存,确实快一些

 

13、

声明为static的方法不需要加final修饰,因为static方法是属于类的,子类无法继承这个方法

 

 

 

 

转载于:https://my.oschina.net/carbenson/blog/1799859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值