一、布局优化
1.思路:减少布局文件的层级
1.<include>标签
2.<merge>标签
3.ViewStub:继承了View,宽高都为0,本身不参与任何布局和绘制过程。
意义:按需加载所需的布局文件,有的页面不需要整个界面初始化的时候就加载,提高程序初始化的性能。
二、绘制优化
1.View的onDraw方法要避免执行大量的操作
一是在onDraw中,不要创建新的局部对象
二是在onDraw中,不要做耗时操作,不然会导致绘制过程不流畅。
三、内存泄漏优化
1.静态内部类持有了外部类对象,导致的内存泄漏,静态变量持有当前类的对象也会造成内存泄漏。(静态成员持有外部类的对象都会造成内存泄漏)
解决办法:在外部类销毁的时候,静态变量置为空null。
2.单例模式导致的内存泄漏:单例方法中传入了Activity,但是Activity关闭的时候,单例还在引用这个activity,导致内存泄漏。
解决办法:可以使用Application的context等。
3.属性动画导致的内存泄漏
解决办法:调用cancel方法。
4.分析工具:MAT
四、响应速度优化以及ANR日志分析
1.当进程发生ANR后,都会在/daga/anr目录下生成一个traces.txt文件,分析这个ANR文件就可以定位ANR的问题。
adb pull /data/anr/traces.txt .
五、ListView优化(GridView)
1.采用ViewHolder复用控件,不会每次都new 一个对象。
2.getView中不要做耗时操作,包括其他回调方法也是不能创建对象,如getSize。
3.根据列表的滑动状态来控制更新频率
4.硬件加速。
六、Bitmap优化
1.BitmapFactory.Options来根据图片进行采样,采样过程中主要用到了 Options的inSampleSize参数。
七、线程优化
1.如果需要创建较多线程,使用线程池,减少线程创建和销毁带来的性能开销。
2.线程池还能控制最大并发数。
八、其他性能优化建议
1.避免创建过多的对象
2.不要过多使用枚举,枚举占用的内存空间要比整形的大
3.常量使用 static fianl来修饰。
4.使用一些Android特有的数据结构,如SpareArray,Pair,Parclable
5.采用内存缓存和磁盘缓存
6.尽量采用静态内部类
参考资料:《Android开发艺术探索》