前言
ANR(Application Not Responding)即应用无响应,在Android系统中,应用发生的ANR由以下几种类型:
类型
说明
KeyDispatchTimeout
最常见的ANR类型是对输入事件5秒内无响应,比如按键或者触摸事件在此时间内无响应。
BroadcastTimeout
BroadcastTimeout是在指定时间内(原生系统默认是10s)内无法处理完成,并且没有结束执行onReceive。
ServiceTimeout
这种类型在Android应用中出现的概率很小,是指Service在特定的时间(原生系统是20s)内无法处理完成。
引起ANR的根本原因总体来说有以下两种:
应用程序本身逻辑有缺陷,或者在某些异常场景触发了此缺陷,如主线程堵塞、死锁循环等导致的。
由于Android设备其他进程的CPU占用搞,导致当前应用进程无法抢占到CPU时间片。
ANR文件介绍
在Android系统中,如果发生ANR,Logcat会产生对应的日志和一个trace文件,分析ANR的原因主要是分析这两个信息。trace文件在Android中的路径为/data/anr/traces.txt,可以使用adb来获取,adb pull /data/anr/traces.txt。
Logcat文件信息信息:
信息
说明
ANR IN
发生AND的具体类。
PID
发生ANR的进程,系统在此时会产生trace文件,当前的时间点也是发生ANR的具体时间,以及生成