這個問題已經被問here但目前還沒有很好的答案是什麼發生使用ResultReceiver如果活動被破壞,意圖服務仍在運行
所以基本上我已經在後臺運行的意圖的服務做一些東西,一旦完成我使用resultreceiver結果發送回活動等什麼我需要知道的是以下
- 如何處理的情況時,活動,而意圖 服務仍在運行被破壞?
- 如何知道活動是否被意圖服務破壞?
- 當活動已被銷燬時,將結果發送回 活動時,會發生什麼情況?是否會產生錯誤?
這個問題已經被問here但目前還沒有很好的答案是什麼發生使用ResultReceiver如果活動被破壞,意圖服務仍在運行
所以基本上我已經在後臺運行的意圖的服務做一些東西,一旦完成我使用resultreceiver結果發送回活動等什麼我需要知道的是以下
這是一個很晚的答案,但我正在研究IntentService
的功能,我遇到了你的問題。
如何處理在intent服務仍在運行時活動被破壞的情況?
由於IntentService
是一個單獨的組件,它將運行繼續運行,直到指定給它的任務完成或在其上運行應用程序被破壞的過程。最初的想法可能是在活動被破壞時停止IntentService
。簡單,不是嗎?好吧,不是。事實上,當您調用stopService(Intent)
時,雖然IntentService
的onDestroy()
方法被調用,但後臺線程將繼續運行,直到完成並將結果傳遞給接收方。
如何知道活動是否從意向服務中被銷燬?
這是一個很好的問題和我自己想知道的事情。一個巧妙的解決辦法在這裏描述 - IntentService responding to dead ResultReceiver
什麼將結果發送回時,當該活動已經破壞活動發生在resultreciever這是否產生錯誤?
這很可能不會導致任何可見的異常,因爲活動不可見。但是,如果您有對活動中定義的對象的引用(這將阻止在線程繼續運行時阻止活動被垃圾回收 - 請參閱IntentService prevents activity from destroying),它可能導致配置更改上的內存泄漏。但上面鏈接,因爲它空值出來的ResultReceiver
的onDestroy
參考應緩解這一問題,避免任何潛在的內存回答問題
而且,這將是值得一提的是,你可以考慮LocalBroadcastManager
這使得它的方法通過註冊/取消註冊BroadcastReceiver
更容易與Activity
的生命週期一起工作。示例可用here from the google samples repo