Android studio Inspection 优化笔记

以下内容皆为基于百度后一些内容整合,这个笔记只是为了自己日后方便查看所做,若有不对之处,请大家多多指教。
  • Android > Lint > Performance 
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引用到外部类的实例。
  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.
            }
        }
    }
更多说明可以看下边的链接~

Android Handler leak 分析及解决办法


3、Inefficient layout weight
当在一个LinearLayout布局中仅包含一个定义weight属性的view控件时,直接指定0dp到其width或height属性更高效,因为在初始化时不再需要测量这个view控件的尺寸,反正到最后它都会霸占所有剩余空间的了。

4、Memory allocations within drawing code

在实际开发中Android中自带的控件有时无法满足我们的需求,这时就需要我们重写控件来实现我们想要的功能。

还有个关于UI体验的问题,就是在onDraw()函数中最好不要去创建对象,否则就提示下面的警告信息:因为onDraw()调用频繁,不断进行创建和垃圾回收会影响UI显示的性能

5、Missing baselineAligned attribute
当LinerLayout的子View都是ViewGroup(自定义控件除外)时,Lint认为它的子View已经不需要基准线对齐了,为了不让LinerLayout去做无用的计算对齐的操作,提出了如上警告,修改掉之后就可以提高性能。当LinerLayout的子View都是ViewGroup(自定义控件除外)时,Lint认为它的子View已经不需要基准线对齐了,为了不让LinerLayout去做无用的计算对齐的操作,提出了如上警告,修改掉之后就可以提高性能。

6、Nested weights are bad for performance

原因分析:在布局进行嵌套使用时,父布局与子布局都使用了android:layout_weight,但不是必须使用时,便会出现如题所示的警告信息。

  解决方法:根据实际情况,去除子布局中非必须使用的android:layout_weight。

7、Do not place Android context classes in static fields

 不去使用静态的context 也不要在Application中设置静态的context来使用,使用context的时候根据使用的场景 判断一下应该使用什么样的context
Android Context 上下文 你必须知道的一切       使用ApplicationContext作为全局变量引用的缺陷   




由于参考内容过多,本文改为译文咯~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值