ANR:Application Not Responding,即应用无响应
ANR一般有三种类型:
1. KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 ( Input event ANR 5sed)
2. BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 (BroadCastReceiver ANR 10 sed)
3. ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 (Service ANR 20 sed)
具体的超时时间的定义在framework下的 ActivityManagerService.Java
anr 是否可以抓取到 log文件?
/data/anr/traces.txt
shell@heroqltechn:/data/anr $ ls -al
-rw-rw-rw- system system 616397 2016-12-10 18:01 traces.txt
-rw-rw-rw- root root 113061 2016-12-08 10:51 traces.txt.bugreport
这是一个没有root过的手机,从权限上看traces.txt 是可以访问的。使用adb pull 取出anr数据
peterdeMacBook-Pro:~ peter$ adb pull /data/anr/traces.txt ~/Desktop/
[100%] /data/anr/traces.txt
分析anr
1. CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR
2. 如果CPU使用量很少,说明主线程被BLOCK了
3. 如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的