优化方案:
代码数据总量:
代码混淆(缩小代码)、数据序列化(google ProtocolBuffer,可节省30%的数据大小)
注:慎用sharedPreferences,为了读一个数据,就将整个xml文件(例如:几百k的数据)读进内存,容易出错
数据结构:使用性能高的数据结构,SparseArray、HashMap
数据类型:使用内存占用小的数据类型,避免使用枚举
数据对象引用:根据不同场景,使用不用引用类型(强 软 弱 虚)
软引用:缓存机制,即实现内存敏感的数据缓存,如图片、网页缓存
虚引用:防止内存泄露,保障对象引用
----------------------------------------
# 性能优化
优化方向:流畅性、稳定性、资源节省性
-流畅性
启动速度:采用 异步加载(多线程)、分步加载、延期加载的策略,减少启动应用时加载的任务页面加载数据
响应速度
导致ANR的时间:
- 用户操作无响应超过5s
- 网络、数据库阻塞10s 广播接收者执行10s
- 服务在20s内无法处理完成 20s
- 稳定性
优化方向:Crash、ANR
ANR:(响应速度慢)使用多线程,将大量耗时操作放在子线程中执行
Crash:应用Crash很多情况是因为OOM
- 资源节省性
1.内存大小(内存优化):
- 避免内存泄露
- 避免内存抖动:避免频繁创建大量、临时、小的变量、局部对象
- Bitmap优化:释放资源、适配屏幕、解码方式、图片缓存
- 提高代码质量 & 减少代码数量
- 日常不正常使用:尽量少用多进程、依赖注入框架等
2.安装包大小:
- 资源优化
- 减少不必要的库
- 代码混淆
- 插件化
减少网络流量:
使用缓存
采用三级缓存:内存缓存> 本地缓存> 网络缓存
减少耗电量:
ML (Memory Leak):指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象
OOM:应用程序所需的内存,超出了系统为其分配的内存限额的现象