1.何为ANR
ANR(Application Not Responding )
应用无响应的简称,是为了在 APP
卡死时,用户 可以强制退出APP
的选择,从而避免卡机无响应问题,这是Android
系统的一种自我保护机制。
2.为什么会产生ANR
在Android里, App的响应能力是由Activity Manager和Window Manager系统服务来监控的. 通常在如下两种情况下会弹出ANR对话框:
- 5s内无法响应用户输入事件(例如键盘输入, 触摸屏幕等).
- BroadcastReceiver在10s内无法结束.
造成以上两种情况的首要原因就是在主线程(UI线程)里面做了太多的阻塞耗时操作, 例如文件读写, 数据库读写, 网络查询等等.
3.出现ANR的时候,如何定位,分析问题呢?
1:查看 bug 上面的描述信息,看下堆栈,cpu 使用情况。
首先我们要确定的是否此 log 有效。
确认依据:看 bug 的描述
看 bug 提供的描述信息,堆栈异常是否和标题一致。
如果不一致,此问题直接给出分析结果,转出对应模块负责。
如果一致,我们需要去看 trace 文件,查看里面的出现的栈信息是否和描述的一致。(通过看测试贴出的 anr 栈里面的时间信息,和我们的 trace 的时间是否一致,一致,此份 trace 有效)
如果不一致,我们需要去看 log,搜索 am_anr,看下是否在测试贴出的 anr 栈的时间信息处