Article / 2026/05/31

性能优化 (三十五) 自动化卡顿检测方案及优化

性能优化 (三十五) 自动化卡顿检测方案及优化 的技术笔记。

自动化卡顿检测方案及优化

为什么需要自动化检测方案

  • 系统工具适合线下针对性分析
  • 线上及测试环节需要自动化检测方案

自动化卡顿检测方案原理

  • 消息处理机制,一个线程只有一个Looper
  • mLogging对象在每个message处理前后被调用
  • 主线程发生卡顿,是在dispatchMessage执行耗时操作

具体实现

  • Looper.getMainLooper().setMessageLogging();
  • 匹配>>>>Dispatching,阈值时间后执行任务(获取堆栈)
  • 匹配<<<<Finished,任务启动之前取消掉

AndroidPerformanceMonitor实战

问题及优化

  • 非侵入式
  • 方便精准,定位到代码的某一行

问题

  • 确实卡顿了,但卡顿堆栈可能不准确
  • 和OOM一样,最后的堆栈只是表象,不是真正的问题
  • 获取监控周期内的多个堆栈,而不仅是最后一个
  • startMonitor 高频采集堆栈 endMonitor 记录多个堆栈 上报

海量卡顿堆栈处理

  • 高频卡顿上报量太大,服务端有压力
  • 分析:一个卡顿下多个堆栈大概率有重复
  • 解决:对一个卡顿下堆栈进行hash排重,找出重复的堆栈
  • 效果:极大的减少展示量同时更高效找到卡顿堆栈

Giscus 未启用:请在 src/site.config.ts 中配置 repoId 与 categoryId。