2011-04-24 76 views
0

android開發人員網站聲明,在onReceive()方法返回後,您可以刪除BroadcastReceiver進程,並且不應在BroadcastReceiver內啓動線程/計時器。但是這與Thread/Timer類的靜態實例變量有什麼關係?我認爲這些靜態實例變量仍然存在,因爲它們綁定到加載的類?或者我錯了(例如,因爲該流程是在一個新的dalvik JVM中啓動的),我是否應該從不在BroadcastReceivers中使用線程/定時器?Android BroadcastReceiver線程/計時器作爲靜態實例變量

回答

1

還是我錯了(例如,由於過程是一個新的Dalvik JVM內開始),並應我從來沒有BroadcastReceivers中使用線程/定時器?

如果BroadcastReceiver在清單登記,不派生線程,啓動定時器,註冊聽衆,或以其他方式做任何事情綁到接收器,將需要生活超越了接收器。如果您的應用程序沒有其他任何內容運行,那麼您的流程隨時都有資格終止,隨身攜帶您的資料。

如果BroadcastReceiver是通過registerReceiver()從其他組件註冊的,那麼其他組件可以fork線程,啓動計時器,註冊監聽器或其他任何組件,但要遵守該組件的正常規則。

+0

如果我的應用程序中還有其他內容正在運行(例如AppWidgetProvider),會發生什麼情況。在這種情況下,流程是否有資格終止?或者靜態實例變量是否仍然存在,線程/定時器是否工作? – Erwin 2011-04-24 20:12:28

+0

@Erwin:一個'AppWidgetProvider'運行幾毫秒並消失 - 它是一個清單註冊的'BroadcastReceiver'。 「在這種情況下,流程是否有資格終止?」 - 絕對。它需要一個活動或服務來保持服務的活力。 「或者靜態實例變量是否仍然存在,線程/定時器是否工作?」 - 請不要使用清單註冊的'BroadcastReceiver'中的線程/定時器。 – CommonsWare 2011-04-24 20:30:57