绘制优化

  1. 减少视图层级
  2. layout
  3. merge
  4. ViewStub
  5. 不在onDraw里进行对象的创建或执行耗时操作,因为onDraw会被大量执行

内存占用优化

  1. 使用内存有好的数据结构,比如sparesearray,arraymap
  2. 避免内存泄漏
  3. 使用池结构和缓存,避免重复创建对象
  4. 根据手机内存大小设置内存缓存
  5. 多进程可以扩大使用内存
  6. 监听componentCallback2的onLowMemory及时释放内存
  7. 及时关闭资源,比如流,数据库

内存泄漏优化

  1. 静态变量:比如静态变量持有activity
  2. 单例模式:单例模式下的对象是静态的,如果把activity注册进来,比如需要回调的情况,会长期持有
  3. 属性动画,如果activity内动画一直播放,animator实例一直在持有view
  4. 静态内部类,比如handler
  5. 使用软引用
  6. webview要及时destroy

响应速度优化

核心思想就是避免在主线程中做耗时操作

懒加载

  1. 两个方法公用一个锁,一个先在子线程调用并进行耗时操作,另一个在主线程后调用,这时候主线程就会等待锁释放,造成anr

RecycleView优化

Bitmap优化

线程优化

使用线程池

启动优化

ApplicationActivity 创建以及回调等过程

谷歌官方给的建议是:

1、利用提前展示出来的 Window,快速展示出来一个界面,给用户快速反馈的体验;

2、避免在启动时做密集沉重的初始化(Heavy app initialization);

3、避免 I/O 操作、反序列化、网络操作、布局嵌套等。

包体积优化

  1. 代码混淆 复用 开启资源压缩
  2. 插件化
  3. 资源优化 使用webp使用矢量图

耗电优化

1.减少 你的应用程序可以删除冗余操作吗?例如,它是否可以缓存下载的数据而 不是重复唤醒无线电以重新下载数据?

2.推迟 应用是否需要立即执行操作?例如,它可以等到设备充电才能将数据备份 到云端吗?

3.合并 可以批处理工作,而不是多次将设备置于活动状态吗?例如,几十个应用 程序是否真的有必要在不同时间打开收音机发送邮件?在一次唤醒收音机期间, 是否可以传输消息?

弱网优化

  1. 减少数据请求频率
  2. 减小数据包体积
  3. 缓存
  4. 不加载图片
  5. 界面先反馈,找时机提交数据,比如点赞操作

其他

  1. 避免大量创建对象
  2. 避免过多使用枚举
  3. 常量 static final
  4. 使用sparsearray和pair等android特有数据结构
  5. 使用缓存