Android的性能优化方法
介绍一些有效的性能优化方法,主要内容包括布局优化,绘制优化,内存泄漏优化,响应速度优化,Listview,bitmap优化,线程优化
一 、 布局优化
布局优化思想很简单,主要是减少布局层级。布局层级少了就意味着Android的绘制时的工作量少了。
尽量删除不必要的空间和层级,有选择性的使用性能较低的ViewGroup,比如RelativeLayout。如果布局中既可以使用relativelayout 又可以使用LinearLayout,那么就采用LinearLayout。
布局优化的另一种方式就是使用 include 标签 merge标签和viewstub
include 标签可以实现布局的复用,而merge 一般都是和include配合使用
关于include和merge以及viewstub 这里不多介绍。
详细的布局优化策略 移步《 Android性能优化 之 布局优化》
二、绘制优化
绘制优化是指 ,在view的ondraw方法中要避免执行大量的操作,主要体现在两个方面。
首先,onDraw中不要创建新的局部对象,这是应为onDraw方法可能会被频繁的调用,这样会在一瞬间产生大量的临时对象,占用过多内存,导致系统频繁GC ,
另外,onDraw方法中不要做耗时任务,也不能执行成千上万次的循环操作。
三、内存泄漏优化
内存泄漏优化分为两个方面。
一方面,开发过程中避免写出有内存泄漏的代码,另一方面,是通过一些分析工具比如MAT来找出潜在的内存泄漏继而解决问题。
关于MAT的使用以后会专门写一篇来介绍一下。
内存泄漏的情况常见的包括以下几种:
1、静态变量导致内存泄漏
静态变量引用Activity或view,导致activity或view无法正常销毁
2、单例模式导致内存泄漏
泄漏原因是 Activity对象被单例模式的对象所持有,而单例模式的特点是生命周期和application保持一致,因此,activity无法被及时释放。
3、属性动画导致内存泄漏
属性动画中有一种无限循环的动画,如果在activity中循环播放的此类动画没有在ondestroy中去停止动画,那么动画会一直播放下去。并且这个时候activity的view会被动画持有,而view持有了activity,最终导致activity无法释放。
四、响应速度优化和日志分析
响应速度优化的核心是避免在主线程中做耗时操作。
ANR出现以后,系统会在/data/anr目录下创建一个文件traces.txt,通过分析这个文件就可以定位出ANR的原因。trace文件的分析这里不赘述。
五、listview 和bitmap的优化
listview的优化,就我个人而言,最好的优化就是用recycleview取而代之。
bitmap的优化主要是对体积较大的图片进行二次采样。
六、线程优化
线程优化的思想是采用线程池避免程序中出现大量的THREAD。
一些性能优化的其他小建议
●避免创建过多对象
●不要过多使用枚举,枚举占用的空间比整型大
●常量尽量使用static final来修饰
●使用一些Android特有的数据结构,比如SparseArray 和Pair等,他们都具有更好的性能
●适当使用软引用和弱引用
●采用内存缓存和磁盘缓存
●尽量采用静态内部内,这样可以避免潜在的由于内部内导致的内存泄漏。