Article / 2026/05/31
性能优化 (三十五) 自动化卡顿检测方案及优化
性能优化 (三十五) 自动化卡顿检测方案及优化 的技术笔记。
自动化卡顿检测方案及优化
为什么需要自动化检测方案
- 系统工具适合线下针对性分析
- 线上及测试环节需要自动化检测方案
自动化卡顿检测方案原理
- 消息处理机制,一个线程只有一个Looper
- mLogging对象在每个message处理前后被调用
- 主线程发生卡顿,是在dispatchMessage执行耗时操作
具体实现
- Looper.getMainLooper().setMessageLogging();
- 匹配>>>>Dispatching,阈值时间后执行任务(获取堆栈)
- 匹配<<<<Finished,任务启动之前取消掉
AndroidPerformanceMonitor实战
- 非侵入性的性能监控组件,通知形式弹出卡顿信息
- com.github.markzhai:blockcanary-android
- https://gitbub,com/markzhai/AndroidPerformanceMonitor
问题及优化
- 非侵入式
- 方便精准,定位到代码的某一行
问题
- 确实卡顿了,但卡顿堆栈可能不准确
- 和OOM一样,最后的堆栈只是表象,不是真正的问题
- 获取监控周期内的多个堆栈,而不仅是最后一个
- startMonitor 高频采集堆栈 endMonitor 记录多个堆栈 上报
海量卡顿堆栈处理
- 高频卡顿上报量太大,服务端有压力
- 分析:一个卡顿下多个堆栈大概率有重复
- 解决:对一个卡顿下堆栈进行hash排重,找出重复的堆栈
- 效果:极大的减少展示量同时更高效找到卡顿堆栈
Giscus 未启用:请在
src/site.config.ts中配置 repoId 与 categoryId。