2017-05-12 34 views
0

爲了我的目的,只要應用程序正在運行(前臺或後臺),我需要監聽CONNECTIVITY_CHANGE廣播。如果我打算接收廣播,即使應用程序在後臺,我應該在哪裏取消註冊BroadcastReceiver?

如果我在onDestroy()方法中取消註冊,那麼如果我導航回第一個活動,則會丟失接收者,因爲第一個活動會置頂。

如果我在onPause()中取消註冊,當應用程序在後臺運行但未殺死時,我無法偵聽更改。

當應用程序被強行殺死時,這會導致接收者泄漏意圖。

對我來說,理想的解決方案是什麼?

感謝提前:)

+0

https://developer.android.com/topic/performance/background-optimization.html#connectivity-action – ianhanniballake

回答

1

如果應用程序是力停止,它會不管你做什麼泄漏。當你被迫停止時,你沒有機會註銷任何東西。

但是,在您的問題的更大精神 - 如果您需要一個地方註冊一個長期的接收器,然後取消註冊,答案是在一個服務。

+0

感謝您提供這些信息,當然指出我的方向是正確的。在其他答案中沒有找到。 從暫時的解決方法角度來看,「有害」是如何泄漏的意圖?有沒有什麼副作用? –

+0

不是很有害。當發生這些泄漏時,有兩種真實場景:您仍然需要接收器並強制關閉。在這種情況下,沒有造成傷害。或者你不需要接收器,過去應該註銷它。在這種情況下,對您的應用程序沒有傷害,但是您的應用程序正在使用它不需要在該接收器上使用處理事件的資源。危害是cpu週期浪費和一些電池電量。那麼傷害最小。 –

+0

太好了,解決了我的問題。 將閱讀更多的服務和嘗試他們爲我的用例。 非常感謝! –

相關問題