当MainThread处于阻塞状态时,ANR对话框如何显示

时间:2018-03-22 07:44:13

标签: android

我正在阅读ANR。大多数事情对我来说都有意义,但我无法理解,如果主线程被阻止,那么操作系统如何在同一进程中创建Dialog并在屏幕上显示它。来自文档:

  

当出现下列情况之一时,将为您的应用程序触发ANR:

  1.当您的活动位于前台时,您的应用在5秒内未响应输入事件或BroadcastReceiver(例如按键或屏幕触摸事件)。

  2.虽然前台没有活动,但BroadcastReceiver尚未在相当长的时间内完成执行。

即主线程与另一个线程陷入僵局所以操作系统如何设置显示对话框。因为我认为我们只能从主线程显示对话框。如果我错了请纠正我,让我知道ANR对话的过程。
任何解释都会非常感激。 THX

1 个答案:

答案 0 :(得分:1)

这是因为不是你的应用程序负责显示对话框。系统处理它。来自documentation

  

如果应用位于前台,系统会向用户显示一个对话框

因此,当您的应用程序是ANR时,外部“应用程序”(或意图,如果您愿意),将处理弹出对话框,允许您终止ANR应用程序......

另外,请阅读this以了解ANR与崩溃之间的区别