布局优化

  1. include
    重复用到的布局可以单独写在一个xml中,用include标签引用。属于代码优化,对性能没影响。
  2. merge
    merge标签用于去除多余的布局嵌套。当子布局的跟布局和父布局类型一致时用。
  3. viewstub
    懒加载,当一个布局中分情况显示子布局的时候,恰当的时候再去加载需要的子布局,而不是一次加载所有。
  4. 优化布局嵌套层级
  5. 避免过度绘制
  6. 优先相对布局

内存泄漏

常见内存泄漏

  1. 注册后没取消造成的内存泄漏,如广播
  2. ListView/GridView没有复用
  3. 单例持有Activity的引用
  4. 静态变量持有Activity的引用
  5. 查询数据库没有关闭cursor
  6. Handler造成的内存泄漏
  7. Bitmap不再使用时没有recycle

内存泄漏检测

LeakCanary

内存优化

  1. ListView复用convertView
  2. onTrimMemery()释放内存
  3. UI隐藏时释放内存
  4. 及时注销监听器
  5. 使用框架管理图片加载,如Glide
  6. largeHeap = true
  7. SpaceArray 避免拆箱装箱
  8. 避免过度抽象
  9. protobuf
  10. 混淆、ZipAlign

其他优化

  1. 硬件加速
  2. 合适的图片和res文件夹
  3. 逻辑放在native
  4. 线程池、Handler线程切换