避免“坏”表现
- 避免堵塞主线程
- 避免可能引发大范围重绘的不必要的重绘
- 用 RelativeLayout 来减少布局层级
- 避免在 LinearLayout 中使用嵌套的 weight 属性(因为weight属性会使每个子View进行两次measure)
- 避免使用没有恰当处理的自定义View
- 避免创建没必要的对象
- 将常量声明为 static final(static比普通变量快 15% - 20%)
- 使用基本数据类型(Integer、Float 比基本类型慢两倍)
- 避免内部的 getter 和 setter(直接访问属性可以快3倍)
- 使用改进的循环语法【译者注:这里应该是指for each循环】
- 对私有的内部类考虑使用包访问级别代替私有访问级别
- 谨慎使用native方法
自定义View
- 遵循KISS原则
- 在布局中使用merge标签来作为根标签(避免额外的ViewGroup)
- 使用include标签(便于布局的复用)
- 避免不必要的布局
- 不要在onDraw中申请内存或者做复杂逻辑
- 去除不必要的invalidate()调用
- 考虑创建自己的ViewGroup
- 用RecyclerView替代ListView和GridView
避免内存抖动
- 不要申请大量不必要的对象内存: 1, 不可变对象:String
- 考虑使用对象池并缓存来减少内存抖动
- 留心enum类型的开销(一个指向枚举类型的引用就要占据4个字节)
2, 自动装箱:Integer, Boolean...
避免内存泄漏
- 不要在内部类里泄漏context实例
- 不要在activity里泄漏view实例
- 使用内部静态类优于非静态的
