2011-03-31 52 views
3

可以不包含任何活動的機器人程序(例如,一個獨立的服務)收到的ANR?可能性在獨立服務的ANR

的Android提到:「在機器人,應用程序響應由活動管理器和窗口管理器系統服務監控,當它檢測到下列條件中的一個Android將顯示特定應用程序中的ANR對話框:」

這是否意味着沒有UI界面的服務可以或不可以導致ANR?

回答

0

不包含任何活動(即獨立服務)的android進程是否可以接收ANR?

在某種意義上說,是的。它可能不會引發對話,但如果主應用程序線程的時間太長,您的服務將被終止。

+0

謝謝你的快速反應。 1)主應用程序線程是否定義了「太長」?或者與用於UI的5秒相同。 2)它會在logcat調試中顯示ANR異常(技術上它是ANR)嗎? 3)那麼導致服務主線程阻塞的任何事情都可能導致ANR? – AndroidPlaya 2011-03-31 23:13:21

4

是的,你可以在包含一個獨立的服務(不活動)過程的ANR。您將在logcat中看到ANR(它在技術上是ANR)。舉個例子,我已經看到了這個在以下情況:

我們有在同一進程作爲獨立服務運行一個BroadcastReceiver。這在主線程上運行。如果廣播意圖無法在合理的時間內分派給BroadcastReceiver(因爲有阻塞主線程),OS會生成一個ANR。文檔似乎表明10秒是BroadcastReceiver完成的限制。

一般來說,在獨立服務進程中主線程上運行的唯一事情是生命週期方法(onCreate,onDestroy等),BroadcastReceivers以及您在主線程上創建的Handler調度的任何內容。其餘的代碼在其他線程中運行。

我想回答到CommonWare的回答您的意見,但我沒有對足夠的聲譽。所以我創建了另一個有希望包含你想要的信息的答案。