我试图在收到推送通知时更新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