ANR在独立服务中的可能性

时间:2011-03-31 22:39:47

标签: android

不包含任何活动的Android进程(即独立服务)是否可以收到ANR?

Android提到:“在Android中,应用程序响应能力由活动管理器和Window Manager系统服务监控。当Android检测到以下某种情况时,它将显示特定应用程序的ANR对话框:”

这是否意味着没有UI界面的服务能够或不能导致ANR?

2 个答案:

答案 0 :(得分:4)

是的,您可以在包含独立服务(无活动)的流程中获得ANR。您将在logcat中看到ANR(技术上是ANR)。举个例子,我在以下情况中看到了这一点:

我们有一个BroadcastReceiver,它运行在与独立服务相同的进程中。这在主线程上运行。如果无法在合理的时间内将广播意图分派给BroadcastReceiver(因为存在阻塞主线程的内容),则OS会生成ANR。该文档似乎表明10秒是BroadcastReceiver完成的限制。

通常,在独立服务进程中主线程上运行的唯一事情是生命周期方法(onCreate,onDestroy等),BroadcastReceivers以及您在主线程上创建的处理程序调度的任何内容。其余代码在其他线程中运行。

我想回答你对CommonWare答案的评论,但我没有足够的声誉。所以我创建了另一个答案,希望包含你想要的信息。

答案 1 :(得分:0)

  

不包含任何活动的Android进程(即独立服务)是否可以收到ANR?

以某种方式说,是的。它可能不会引发对话,但如果在主应用程序线程上花费太长时间,您的服务将被终止。