在后台执行网络操作的用途是什么?

时间:2011-11-08 10:48:52

标签: android service android-asynctask broadcastreceiver

我正在从BroadcastReceiver执行网络操作。此操作正在后台执行,当发生这种情况时,应用程序将不会运行。

哪个更好用? ServiceAsyncTask

2 个答案:

答案 0 :(得分:2)

更好地使用服务。 AsyncTask主要不是阻止UI。

答案 1 :(得分:2)

BroadcastReceiver对象仅在对onReceive()的调用期间有效。一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态。因此,在此处使用AsyncTaskThread是有意义的。

同样来自documentation

  

特别是,您可能无法在BroadcastReceiver中显示对话框或绑定到服务。


  

如果此BroadcastReceiver是通过<receiver>标记启动的,则从该函数返回后该对象不再存在。这意味着您不应该执行任何异步返回结果的操作 - 特别是,为了与服务进行交互,您应该使用startService()而不是bindService()。如果您希望与已在运行的服务进行交互,可以使用peekService()

这意味着您可以从广播rcvr startService()通过意图传递网络操作所需的数据。该服务将执行网络操作。如果服务是粘性的,您可以使用peekService()。但是你永远不应该bindService()到广播rcvr。