目前,我从onReceive()执行
AsyncTask
,以便网络操作不会阻塞UI线程,但我看到BroadcastReceiver还提供了goAsync()
方法,用于大致相同的目的。我很难找到关于在此上下文中使用
AsyncTask
和goAsync()
之间确切区别的解释......何时使用其中一个,何时使用另一个?
(*) 我提到我的网络操作和后续处理通常会在10秒内完成(**),这是我了解到在从onReceive()
返回后BroadcastReceiver
被杀死之前的时间。然而,在特别具有挑战性的条件下(不可靠的网络、缓慢的设备),最好允许操作继续进行超过10秒。在这方面,上述方法中哪一个更好呢?至少对于goAsync()
,文档建议你仍然应该在10秒内完成包装事物。但是对于AsyncTask
,是否可能生成AsyncTask
并使doInBackground()
方法运行超过10秒...如果它被声明为BroadcastReceiver
的静态内部类,它是否会在BroadcastReceiver
的生命周期之外存在?
(**) 编辑:10秒的限制是在BroadcastReceiver.onReceive()
的文档中...具体来说: