专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
今天看啥  ›  专栏  ›  鸿洋

一波深入的Android 性能优化

鸿洋  · 公众号  · android  · 2024-12-26 08:35
    

主要观点总结

本文介绍了卡顿、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时,将整个监控流程形成一个闭环,包括获取主线程堆栈信息、检测死锁、获取死锁对应线程堆栈信息、上报到服务器等。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照