- 假如可以用Linearlayout,就用Linearlayout,因为Relativelayout比较复杂。
- 采用include,merge,viewstub标签重用布局。
- include 的id以include指定id为准,假如根元素也有id
- include 假如指定android:layout_*属性,那么必须重写include的宽高。
- merge去掉多余的嵌套
viewstub不参与绘制过程,按需加载。infalteId是加载后的根元素id。目前不支持merge标签。
绘制优化
onDraw避免做大量操作,不要创建新的局部对象。
- onDraw不要做耗时操作,保证每帧绘制不超过16ms
内存泄露优化
- 静态变量导致的内存泄露。不要持有activity的引用无法释放。
- 单例模式导致的内存泄露。注册记得要解绑。
属性动画导致内存泄露。在onDestory调用animator。cancel()停止动画。
响应速度优化和ANR日志分析
activity5秒无法响应和BroadReceiver10秒无法响应就会ANR.
- 发生ANR会/data/anr创建文件traces.txt
- Listview优化 1)采用viewholder避免在getview做耗时操作 2)根据滑动状态来执行任务,快速滑动时不适宜开启大量异步任务。3)开启硬件加速来让listview滑动更加流畅。
- bitmap优化,采用bitmapFactory.options根据图片采样,使用inSamleSize参数。
- 线程优化,使用线程池。
- 避免创建过多的对象;不要过多使用枚举,枚举占用内存空间大;常量使用static final修饰;使用android特有的数据结构例如SparseArray和pair
- 适当使用弱引用和软引用
- 采用内存缓存和磁盘缓存
- 尽量采用静态内部类,避免内部类的内存泄露。
- 善用MAT分析内存泄露。