这篇文章上次修改于 2450 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
以下内容摘自《Android开发艺术探索》作者 任玉刚
布局优化
- 尽量减少布局层级
- 尽量使用简单的ViewGroup,比如LinearLayout或FrameLayout
注意:当二者冲突时,以减少布局层级为主。
- 使用<include>布局重用,<merge>配合<include>减少布局层级,ViewStub 用时加载(ViewStub不支持<merge>标签)
绘制优化
- onDraw中不要创建新的局部对象
- onDraw中不要做耗时任务,不要做过多次循环操作
内存泄露优化
- 静态变量导致内存泄漏,当该类中声明的静态变量持有该类时,导致该类无法正常销毁
- 单例模式导致的内存泄漏,因为单例模式的生命周期与Application一致,所以当单例持有该类时,会导致该类无法正常销毁
- 属性动画导致的内存泄漏,有一类无限循环的动画,在没有适当的停止动画时,会导致Activity无法正常销毁
响应速度优化
- 避免在主线程中做耗时操作
ListView/GridView的优化
- 采用ViewHolder并避免在getView中执行耗时操作
- 根据列表的滑动状态来控制任务的执行频率
- 尝试开启硬件加速使ListView滑动更加流畅
Bitmap优化
- 通过BitmapFactory.Options来根据需要对图片进行采样,主要参数inSampleSize
线程优化
- 采用线程池,可以重用内部的线程从而避免线程的创建和销毁,同时可以有效的控制并发线程数
其他优化建议
- 避免创建过多对象
- 不要过多使用枚举,枚举占用的内存空间要比整型大
- 常量请使用static final来修饰
- 使用一些安卓特有的数据结构,比如SparseArray和Pair等
- 适当使用软引用和弱引用
- 采用内存缓存和磁盘缓存
- 尽量采用静态内部类,避免由内部类而导致的内存泄漏
没有评论