为什么需要自动化检测方案
系统工具适合线下针对性分析
线上及测试环节需要自动化检测方案
自动化卡顿检测方案原理
消息处理机制,一个线程只有一个Looper
mLogging对象在每个message处理前后被调用
主线程发生卡顿,是在dispatchMessage执行耗时操作
具体实现
Looper.getMainLooper().setMessageLogging()
匹配>>>>>Dispatching,阈值时间后执行任务(获取堆栈)
匹配<<<<<Finished,任务启动之前取消掉
AndroidPerformanceMonitor实战
非侵入式的性能监控组件,通知形式弹出卡顿信息
问题及优化
自动检测方案问题
确实卡顿了,但卡顿堆栈可能不准确
和OOM一样,最后的堆栈只是表象,不是真正问题
可能在T2的时候造成卡顿的函数已经执行完毕,这时候获取到的堆栈信息就没有包含造成真正卡顿的函数
自动检测方案优化
获取监控周期内的多个堆栈,而不仅是最后一个
海量卡顿堆栈处理
高频卡顿上报量太大,服务端有压力
分析:一个卡顿下有多个堆栈大概率有重复
解决:对一个卡顿下堆栈进行hash排重,找出重复的堆栈
效果:极大的减少展示量同时更高效找到卡顿堆栈