这篇文章上次修改于 2384 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

以下内容摘自《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等
  • 适当使用软引用和弱引用
  • 采用内存缓存和磁盘缓存
  • 尽量采用静态内部类,避免由内部类而导致的内存泄漏