Skip to content

性能优化

性能监控

Java侧可以使用Debug.startMethodTracingDebug.startMethodTracingSampling,这两种方法也都是Android Studio Profiler里cpu record实际所用工具。如果需要手动监控,则一般考虑AOP的方式,一般会在Gradle Plugin中依靠Android gradle plugin的Transform API来完成。AOP常用的库有asm, javaassist。通过AOP的方式:

  • 在方法前后的插桩,以此检测慢方法。
  • 在某些生命周期事件插桩,以检测关键事件。
  • 对网络请求如Retrofit.Builder插桩,增加自定义拦截器,来完成网络请求性能检测。

此外,还有一些常见其他方式如:

  • 检测Cpu占用,pstoplinux工具。
  • 后台线程可以周期检查内存信息,Debug.getMemoryInfo
  • 某些条件下需要转储内存做进一步分析,Debug.dumpHprofData
  • 某些条件下需要打印系统服务统计,Debug.dumpService
  • Choreographer周期检测帧率。卡顿。
  • 主线程周期检测StackTrace, 通过thread.stacktrace()方法。来采样主线程方法。
  • Anr可以通过/data/anr/trace.txt检测,并借助FileObserverAPI。
  • 流量监控,context.getSystemService(Context.NETWORK_STATS_SERVICE)系统服务。

最后,还有高级方式,即使用JVM TI。这里可以参阅“java”section

速度

  • 预加载
  • 懒加载
  • 预连接,节点选优
  • AsyncInflate, viewStub,
  • 代码细节,log toString
  • 优先级队列

内存

  • 线程管理
  • 内存泄漏

包大小

  • 混淆
  • 插件、异步下发
  • 矢量
  • 使用R8优化应用
  • 优化代码(清除未使用的条件语句等)
  • 缩减代码(清除未使用的依赖代码)
  • 缩减资源(清除未使用资源)
  • 混淆代码(缩短类名)

设备

  • 设备估分,动画相关
  • lite版本

网络

  • 增加压缩请求、响应编码

渲染

  • RecyclerView DiffUtils...

拓展阅读