Android卡顿优化 | ANR分析与实战(附ANR-WatchDog源码分析及实战、与AndroidPerformanceMonitor的区别)...

本文要点

  • ANR概述
  • 发生ANR后Android系统的执行流程
  • ANR-WatchDog原理与实战
  • ANR的传统解决套路
  • ANR模拟实战
  • 线上ANR监控方案【ANR-WatchDog原理分析】
  • ANR-WatchDog实战
  • ANR-WatchDog总结
  • ANR-WatchDog与AndroidPerformanceMonitor的区别
项目GitHub

ANR概述

  • KeyDispatchTimeout,5s
    即按键或者触摸事件,在特定的时间(一般5s)之内没有响应;

  • BroadcastTimeout,前台10s,后台60s
    BroadReceiver 在特定的时间(一般前台10s,后台60s)之内没有响应完成;

  • ServiceTimeout,前台20s,后台200s
    Service 在特定的时间(一般前台20s,后台200s)之内没有处理完成;

发生ANR后Android系统的执行流程

  • APP发生ANR
  • 进程接收异常终止信号,开始写入进程ANR信息(当时场景,包含当前线程所有堆栈信息、CPU/IO的使用情况等);
  • 弹出ANR提示框,提示用户关闭APP或者继续等待;(不同ROM表现不同,有的手机厂商会去掉这个提示框)

ANR的传统解决套路

  • 【线下】在AS的Terminal中,使用
    adb pull data/anr/traces.txt 要存储在本地的路径
    导出上面提到的ANR现场信息文件
    导出来后,便可对文件内容进行详细分析:从CPU、IO、锁冲突等原因思考;

ANR模拟实战

  • 模拟ANR原因:锁冲突;

    更改代码:
    9125154-5976a8fc742b071a.png
    运行程序,等到程序ANR或崩溃,

    在Terminal使用刚刚提到的命令,导出ANR的信息文件:
    9125154-abbf4725b090eccb.png
    生成文件:
    9125154-372703d127a63e74.png
    打开文件,可以找到原因:
    9125154-f05430ab4bad26a5.png
    上次的BlockCanary同样捕捉到原因:
    9125154-f74744bfab4497ed.png

线下套路其实就是在APP发生ANR时,
导出信息文件,
查看文件,结合代码进行分析;

线上ANR监控方案</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌川江雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值