2016-07-30 47 views
4

這個問題已經被問here但目前還沒有很好的答案是什麼發生使用ResultReceiver如果活動被破壞,意圖服務仍在運行

所以基本上我已經在後臺運行的意圖的服務做一些東西,一旦完成我使用resultreceiver結果發送回活動等什麼我需要知道的是以下

  1. 如何處理的情況時,活動,而意圖 服務仍在運行被破壞?
  2. 如何知道活動是否被意圖服務破壞?
  3. 當活動已被銷燬時,將結果發送回 活動時,會發生什麼情況?是否會產生錯誤?

回答

1

這是一個很晚的答案,但我正在研究IntentService的功能,我遇到了你的問題。

如何處理在intent服務仍在運行時活動被破壞的情況?

由於IntentService是一個單獨的組件,它將運行繼續運行,直到指定給它的任務完成或在其上運行應用程序被破壞的過程。最初的想法可能是在活動被破壞時停止IntentService。簡單,不是嗎?好吧,不是。事實上,當您調用stopService(Intent)時,雖然IntentServiceonDestroy()方法被調用,但後臺線程將繼續運行,直到完成並將結果傳遞給接收方。

如何知道活動是否從意向服務中被銷燬?

這是一個很好的問題和我自己想知道的事情。一個巧妙的解決辦法在這裏描述 - IntentService responding to dead ResultReceiver

什麼將結果發送回時,當該活動已經破壞活動發生在resultreciever這是否產生錯誤?

這很可能不會導致任何可見的異常,因爲活動不可見。但是,如果您有對活動中定義的對象的引用(這將阻止在線程繼續運行時阻止活動被垃圾回收 - 請參閱IntentService prevents activity from destroying),它可能導致配置更改上的內存泄漏。但上面鏈接,因爲它空值出來的ResultReceiveronDestroy參考應緩解這一問題,避免任何潛在的內存回答問題

而且,這將是值得一提的是,你可以考慮LocalBroadcastManager這使得它的方法通過註冊/取消註冊BroadcastReceiver更容易與Activity的生命週期一起工作。示例可用here from the google samples repo

相關問題