Android-ANR

Android-ANR

ANR(Application Not Responding)出现的原因有:

(1)输入事件(如触摸和按键等)在 5s 内未响应。

(2)BroadcastReceiver 在规定时间内(前台广播 10s,后台广播 60s)未执行完 onReceive(),因此在 onReceive() 中不要执行耗时操作。

(3)Service 在规定时间内(前台服务 20s,后台服务 10s)未完成启动(onCreate())。

(4)ContentProvider 在 10s 内未完成启动(onCreate())。

发生 ANR 时,Android 会在 /data/anr/ 下生成一个 traces.txt,可通过 Adb 命令导出:

1
$adb pull data/anr/traces.txt

打开文本,找到对应的进程名,在下面查找发生 ANR 相关的类、方法。

也有可能是 CPU 满负载、IO 阻塞、内存泄漏等等。


参考文献