以下内容皆为基于百度后一些内容整合,这个笔记只是为了自己日后方便查看所做,若有不对之处,请大家多多指教。
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引用到外部类的实例。
[java]
view plain
copy
static class MyHandler extends Handler { 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) { } } }
更多说明可以看下边的链接~
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作为全局变量引用的缺陷