Android平台如何检测ANR问题?

6

当 Android 应用程序无响应时,会弹出 ANR 对话框。我的问题是:Android 平台如何检测 ANR 并做出这样一个弹出对话框的决定。


通常情况下,如果一个应用程序无法响应用户输入,系统会显示 ANR。例如,如果一个应用程序在 UI 线程上阻塞了某些 I/O 操作(通常是网络访问),以至于系统无法处理传入的用户输入事件,则会触发 ANR。 - Robert Harvey
1个回答

4

这基于UI线程及其回到消息循环所需时间(消息循环对应用开发者来说是隐藏的,但在你的UI线程上有一个接收用户输入、绘图请求、AsyncTask完成等消息的巨大循环)。基本上,在每个消息之前,你都有一定的固定时间,否则就会导致ANR。等待消息时花费的睡眠时间永远不会导致ANR。在Android中,有一个单独的看门狗进程,检查该线程自上次到达该循环顶部以来的时间长度,如果时间过长,则会终止它并显示ANR对话框。


此外,我相信安卓在5秒的输入事件超时之后会显示ANR。 - biddulph.r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接