布局优化
1、尽量减少布局文件的层级
2、采用标签:<include>
、<merge>
和ViewStub
。<include>
主要用于布局重用。<merge>
一般和<include>
配合使用,可以减少布局的层级。ViewStub
提供按需加载的功能,需要是才会将ViewStu
中的布局加载到内存。
绘制优化
绘制优化是指View的onDraw方法要避免执行大量地操作。
1、onDraw中不要创建新的局部对象。因为onDraw可能会被频繁的调用而产生大量临时对象,占用内存且频繁gc
。
2、onDraw中不要做耗时任务,也不能执行成千上万循环操作,会抢占CPU时间片,导致绘制过程不顺畅。View的绘制帧率保证在60fps
是最佳。
内存泄漏优化
1、静态变量导致的内存泄漏
2、单列模式导致的内存泄漏
3、属性动画导致的内存泄漏
响应速度优化和ANR日志分析
避免在主线程做耗时操作,耗时操作放到子线程中,采用异步方式执行。
线程优化
线程优化的思想是采用线程池,避免程序中存在大量地Thread。线程池可以重用内部的线程,避免线程的创建和销毁所带来的开销,也能有效地控制线程的最大并发数,避免大量地线程因互抢系统资源而导致阻塞现象。
优化建议
- 避免创建过多的对象
- 不要过多使用枚举,枚举占用的内存空间比整形大
- 常量使用
static final
来修饰 - 适当使用软引用和弱引用
- 采用内存缓存和磁盘缓存
- 尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏