我試圖在收到推送通知時更新UI的狀態。爲了做到這一點,我需要啓動一個AsyncTask
來執行一些網絡操作,然後根據結果更新UI。使用BroadcastReceiver啓動AsyncTask
根據文檔對BroadcastReceiver
,接收機內執行異步操作是不安全的,因爲它執行的處理可以被立即返回onReceive()
殺死,假設有在該過程中沒有其他「應用程序組件」。
BroadcastReceiver
是在其自己的進程中運行,還是在與包含Activity相同的進程中運行?由於我只關心完成任務,只要有UI更新,我不擔心如果活動關閉,AsyncTask
臨死。假設BroadcastReceiver與活動處於同一個過程中,這是否可以啓動我在接收器中描述的任務,這樣做是否安全?
編輯:
要澄清,我註冊在活動的onResume()
接收器和註銷其onPause()
,所以它應該只接受意圖時,活動已經激活。
如果不安全,爲什麼不使用「服務」而不是BroadcastReceiver?它會完成同樣的事情,但沒有你提到的問題。 – Andy 2012-07-28 00:34:39
@我知道在任何情況下使用「服務」都是安全的,但我試圖確定在這種情況下是否真的有必要。 – jnackman 2012-07-28 00:39:48
好吧,如果你考慮一下。服務非常適合運行異步操作。因此,爲什麼同樣的限制不存在。 BroadcastReceivers主要用於其他事情,比如系統發生什麼事情,而不是通過網絡更新數據。因此「廣播」。雖然「服務」就是這樣,但您正在運行的服務用戶不需要知道。希望這是有道理的。 – Andy 2012-07-28 00:43:39