本文要点
- 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原因:锁冲突;
更改代码:
在Terminal使用刚刚提到的命令,导出ANR的信息文件:
线下套路其实就是在APP发生ANR时,
导出信息文件,
查看文件,结合代码进行分析;