1. Disk I/O
SharedPreferences 扩展性不好,可以考虑使用扁平化文件+LRU 内存缓存,如果有大量keys可以考虑使用SnappyDB。
2. Networking
- 并行和优先级http连接 Volley
- byte buffer 复用,OkHttp
3. 解析
- 避免使用反射进行解析
- 解析大量流数据时使用SAX
- 使用代码生成器解析器
4. Latency cpu 时间
- 在应用启动时指获取必要的信息,从而优化启动时间
- 限制在一个固定大小的线程池中执行异步任务
- 在Acidity中尽早进行网络请求
- 监测网络连接状态,从而调整获取数据策略
- 尽可能地从网络获取关键数据
- 在scroll layout中注意View的回收和循环,注意合理地实现View的回收
- 避免重复调用系统服务,启动一次然后在内存中缓存使用
- 避免频繁调用自定义view的invalidate 和ondraw,尽量一次调用批量udpate多个view
- 尽量使用lint和fltten view hierarchies 来优化view
- 避免访问类的内部成员变量
5. 图片和scrolling
- 使用高效的图片库避免频繁GC和内存抖动
- 使用固定大小的100_100,200_200等来提高CND的cache
- 避免在客户端自己调整图片大小,而是直接使用合理大小的图片
- 不用吧图片放置在分辨率敏感的文件夹下,这样的图片在运行时会被放大,有时会导致OOM
6. GC和内存
- 缓存频繁使用的Object避免GC
- 不用强引用activity context,使用application 的context或者弱引用,这样可以避免在activity finish之后的内存泄漏
7. 渲染
- 优化ui线程中频繁执行的操作
- 使用FPS检测渲染卡顿问题,并优化耗时操作