性能优化大纲
绘制优化
- 减少视图层级
- layout
- merge
- ViewStub
- 不在onDraw里进行对象的创建或执行耗时操作,因为onDraw会被大量执行
内存占用优化
- 使用内存有好的数据结构,比如sparesearray,arraymap
- 避免内存泄漏
- 使用池结构和缓存,避免重复创建对象
- 根据手机内存大小设置内存缓存
- 多进程可以扩大使用内存
- 监听componentCallback2的onLowMemory及时释放内存
- 及时关闭资源,比如流,数据库
内存泄漏优化
- 静态变量:比如静态变量持有activity
- 单例模式:单例模式下的对象是静态的,如果把activity注册进来,比如需要回调的情况,会长期持有
- 属性动画,如果activity内动画一直播放,animator实例一直在持有view
- 静态内部类,比如handler
- 使用软引用
- webview要及时destroy
响应速度优化
核心思想就是避免在主线程中做耗时操作
懒加载
- 两个方法公用一个锁,一个先在子线程调用并进行耗时操作,另一个在主线程后调用,这时候主线程就会等待锁释放,造成anr
RecycleView优化
Bitmap优化
线程优化
使用线程池
启动优化
Application、Activity 创建以及回调等过程
谷歌官方给的建议是:
1、利用提前展示出来的 Window,快速展示出来一个界面,给用户快速反馈的体验;
2、避免在启动时做密集沉重的初始化(Heavy app initialization);
3、避免 I/O 操作、反序列化、网络操作、布局嵌套等。
包体积优化
- 代码混淆 复用 开启资源压缩
- 插件化
- 资源优化 使用webp使用矢量图
耗电优化
1.减少 你的应用程序可以删除冗余操作吗?例如,它是否可以缓存下载的数据而 不是重复唤醒无线电以重新下载数据?
2.推迟 应用是否需要立即执行操作?例如,它可以等到设备充电才能将数据备份 到云端吗?
3.合并 可以批处理工作,而不是多次将设备置于活动状态吗?例如,几十个应用 程序是否真的有必要在不同时间打开收音机发送邮件?在一次唤醒收音机期间, 是否可以传输消息?
弱网优化
- 减少数据请求频率
- 减小数据包体积
- 缓存
- 不加载图片
- 界面先反馈,找时机提交数据,比如点赞操作
其他
- 避免大量创建对象
- 避免过多使用枚举
- 常量 static final
- 使用sparsearray和pair等android特有数据结构
- 使用缓存
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 炎武的学习笔记!