卡顿分析技巧
首先,看log:
- 主线程message卡顿 Looper : Slow dispatch took 4088ms/OpenGLRenderer: Davey! duration=4088ms
- Skipped 494 frames! The application may be doing too much work on its main thread.
- Binder调用慢:Slow Binder / binder_sample
- OpenGLRenderer: dequeueBuffer failed
- E SurfaceFlinger: Attempted to create an ExternalTexture for layer lrc#0 that exceeds render target size limit.
其次,看系统资源是否充足,比如内存不足,cpu是否充足,是否存在cpu抢占(后台子线程可能抢占了主线程cpu)
再次,如果能复现,但不知道具体哪个函数耗时,抓systrace(perfetto更好)手动添加trace埋点代码,因为系统埋点无法定位一些重点函数
再次,接入插桩工具打印出每个函数的耗时,使用andoridstudio的traceview
最后,看下系统是否有异常,所有的app都卡,比如smmu_service 异常报SMMU Fault error
卡顿优化方法:
- 减少布局层级
- 耗时任务放在子线程
- 同步binder调用改成异步
- 避免频繁全局刷新界面
- 等等