性能优化
性能监控
Java侧可以使用Debug.startMethodTracing
或Debug.startMethodTracingSampling
,这两种方法也都是Android Studio Profiler里cpu record实际所用工具。如果需要手动监控,则一般考虑AOP的方式,一般会在Gradle Plugin中依靠Android gradle plugin的Transform API来完成。AOP常用的库有asm
, javaassist
。通过AOP的方式:
- 在方法前后的插桩,以此检测慢方法。
- 在某些生命周期事件插桩,以检测关键事件。
- 对网络请求如Retrofit.Builder插桩,增加自定义拦截器,来完成网络请求性能检测。
此外,还有一些常见其他方式如:
- 检测Cpu占用,
ps
或top
linux工具。 - 后台线程可以周期检查内存信息,
Debug.getMemoryInfo
。 - 某些条件下需要转储内存做进一步分析,
Debug.dumpHprofData
。 - 某些条件下需要打印系统服务统计,
Debug.dumpService
。 - Choreographer周期检测帧率。卡顿。
- 主线程周期检测StackTrace, 通过
thread.stacktrace()
方法。来采样主线程方法。 - Anr可以通过
/data/anr/trace.txt
检测,并借助FileObserver
API。 - 流量监控,
context.getSystemService(Context.NETWORK_STATS_SERVICE)
系统服务。
最后,还有高级方式,即使用JVM TI。这里可以参阅“java”section
速度
- 预加载
- 懒加载
- 预连接,节点选优
- AsyncInflate, viewStub,
- 代码细节,log toString
- 优先级队列
内存
- 线程管理
- 内存泄漏
包大小
- 混淆
- 插件、异步下发
- 矢量
- 使用R8优化应用
- 优化代码(清除未使用的条件语句等)
- 缩减代码(清除未使用的依赖代码)
- 缩减资源(清除未使用资源)
- 混淆代码(缩短类名)
设备
- 设备估分,动画相关
- lite版本
网络
- 增加压缩请求、响应编码
渲染
- RecyclerView DiffUtils...