我正在从BroadcastReceiver
执行网络操作。此操作正在后台执行,当发生这种情况时,应用程序将不会运行。
哪个更好用? Service
或AsyncTask
?
答案 0 :(得分:2)
更好地使用服务。 AsyncTask主要不是阻止UI。
答案 1 :(得分:2)
BroadcastReceiver
对象仅在对onReceive()的调用期间有效。一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态。因此,在此处使用AsyncTask
或Thread
是有意义的。
同样来自documentation:
特别是,您可能无法在BroadcastReceiver中显示对话框或绑定到服务。
如果此BroadcastReceiver是通过
<receiver>
标记启动的,则从该函数返回后该对象不再存在。这意味着您不应该执行任何异步返回结果的操作 - 特别是,为了与服务进行交互,您应该使用startService()
而不是bindService()
。如果您希望与已在运行的服务进行交互,可以使用peekService()
这意味着您可以从广播rcvr startService()
通过意图传递网络操作所需的数据。该服务将执行网络操作。如果服务是粘性的,您可以使用peekService()
。但是你永远不应该bindService()
到广播rcvr。