主要观点总结
本文介绍了卡顿、ANR和死锁监控方案的原理和方法,包括卡顿原理、卡顿监控、ANR触发流程、ANR分析方法和监控方式,以及死锁导致的ANR和死锁监控。文章还提到了如何形成闭环监控流程,并在发生ANR时获取主线程堆栈信息和死锁线程堆栈信息,上报到服务器,并定位到最后修改代码的同学。
关键观点总结
关键观点1: 卡顿原理
卡顿通常是由于主线程有耗时操作导致的,超过阈值会触发ANR。卡顿可能由MessageQueue#next阻塞或Handler的dispatchMessage耗时太久引起。
关键观点2: 卡顿监控
卡顿监控可以通过Looper提供的Printer接口计算Handler处理一个消息的耗时,判断是否出现卡顿。也有使用字节码插桩技术,在编译期插入代码统计方法耗时。
关键观点3: ANR触发流程
ANR触发流程可以比喻为埋炸弹和拆炸弹的过程,如Service、BroadcastQueue、ContentProvider、InputDispatching的超时会导致ANR。
关键观点4: ANR分析方法
ANR的分析通常通过分析/data/anr/traces.txt文件,获取主线程和其他线程的堆栈信息。
关键观点5: ANR监控方式
ANR监控可以通过抓取系统traces.txt文件上传、使用ANRWatchDog库、优化后的ANRMonitor等方式进行。
关键观点6: 死锁导致的ANR和死锁监控
死锁导致的ANR可以通过获取当前blocked状态的线程、目标锁被哪个线程持有、找到一直不释放锁的线程、通过算法找到死锁线程,并输出堆栈信息。
关键观点7: 形成闭环
将卡顿监控、ANR监控和死锁监控连接起来,在发生ANR时,将整个监控流程形成一个闭环,包括获取主线程堆栈信息、检测死锁、获取死锁对应线程堆栈信息、上报到服务器等。
免责声明
免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。
原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过
【版权申诉通道】联系我们处理。