3

無法在活動中註銷動態註冊的BroadcastReceiver會有什麼後果?它會運行它的onReceive()即使在活動被破壞後也會被調用(如果與它的意圖過濾器相匹配的廣播被觸發,那麼它會被調用)?即使這個過程被殺死了?動態註冊的BroadcastReceivers是否可以倖免於組件/應用程序的死亡?


相關(docs

如果您Activity.onResume()實現註冊接收器,您應該註銷它Activity.onPause()。 (暫停時不會收到意圖,這將減少不必要的系統開銷)。不要在Activity.onSaveInstanceState()中取消註冊,因爲如果用戶移回歷史堆棧中,將不會調用它。

這是否意味着生物圈纔有效,直到在onPause運行(如果註冊活動)在薑餅我的副手實驗表明(他們副手確實) - 或如果我註銷,然後我不會收到意圖(如說here)?

編輯:其實我posted以此爲文檔

回答

2

問題意味着什麼有一個失敗的活動註銷動態註冊廣播接收器?

我懷疑有可能是幾個可能的結果,但是這將取決於什麼BroadcastReceiver是註冊做,它是否是一個獨立的類或內部類的Activity的。

即使在活動被破壞後它會運行嗎?

不清楚「run」是什麼意思。從技術上講,註冊BroadcastReceiver不是純粹由於註冊而「運行」。實際上,註冊只是一種將「掛鉤」放入Android消息傳遞系統的例子,其中onReceive(...)方法是回調。如果有廣播與BroadcastReceiver's意向過濾器相匹配,那麼它的'運行'生命是從onReceive(...)的呼叫開始到結束。

即使這個過程被殺死?

號作爲在單一過程Android應用程序運行的所有組件(除了少數例外,如外的過程Services),一旦過程被中止,則BroadcastReceiver將與它殺死。

那麼這是否意味着BR只在onPause運行之前處於活動狀態(如果在活動中註冊的話)...

正如我上面提到的,BroadcastReceiver只是「活躍」在它的onReceive(...)方法生活 - 在其他時間,它不會被實例化,並簡單地以「註冊」狀態。

...或者如果我取消註冊,那麼我將不會收到意圖(如此處所述)?

同樣,正如我上面提到的,註冊只是告訴操作系統接收方希望接收與意向過濾器匹配的通知(廣播)。如果未註冊,則系統將刪除該特定BroadcastReceiver類的「掛鉤」(回調),因此它不會被實例化並通過相關的Intent

+0

「我懷疑可能會有一些可能的結果,但這取決於BroadcastReceiver註冊的內容以及它是一個獨立的類還是活動的內部類」 - >這是最重要的部分這個問題確實存在 - 必須有圓頂文檔,說明未註冊時會發生什麼 –

+0

「」跑步「的含義並不清楚。」 - >將onReceive調用?即使在過程死亡之後 - 但在收集活動垃圾之後的一件事情 –

相關問題