关于ANR
anr类型
-
主线程对输入事件在5秒内没有处理完毕
Window、 InputDispatcher、 InputChannel,会显示提示
-
主线程在执行BroadcastReceiver的onReceive函数时10秒内没有执行完毕
BroadcastReceiver(简称BR)的onReceive函数运行在主线程中,当这个函数超过10秒钟没有返回就会触发ANR,只有log输出
-
主线程在执行Service的各个生命周期函数时20秒内没有执行完毕
Service的各个生命周期函数也运行在主线程中,当这些函数超过20秒钟没有返回就会触发ANR,只有log输出
处理方法
定位到 logcat.log 文件中 “not responding” 发生时间点,去查看发生 ANR 时间点对应的 trace 文件,该文件路径为/data/anr/traces.txt
如何避免
-
合理使用 UI 主线程,耗时操作放入其他线程工作