【发布时间】:2016-07-08 07:59:24
【问题描述】:
我有一个BroadcastReceiver(或者,更具体地说,一个AppWidgetProvider),我需要在onReceive() 方法中执行一些网络操作...不是特别长时间运行(应该在10 秒内完成,并且如果没有,那么我很高兴(*)让他们超时)。
目前我正在从onReceive() 执行AsyncTask,这样网络操作就不会阻塞UI 线程,但我看到BroadcastReceiver 也提供了goAsync() 方法,显然几乎相同目的。
我正在努力寻找一个解释,说明在这种情况下使用 AsyncTask 和 goAsync() 之间究竟有什么区别......你什么时候使用一个,什么时候使用另一个?
(*) 我提到我的网络操作和后续处理通常会在 BroadcastReceiver 被杀死之前(从onReceive() 返回之后)之前的 10 秒 (**) 内完成。但是,理想情况下,在特别具有挑战性的条件下(不可靠的网络、慢速设备)允许操作继续超过 10 秒会很好。在这方面,上述任何一种方法是否比另一种更好?至少对于goAsync(),文档建议您仍应在 10 秒内完成。但是对于AsyncTask,是否有可能产生AsyncTask 并让doInBackground() 方法运行超过10 秒......如果它被声明为静态内部,它是否会在BroadcastReceiver 的生命周期之外存在? BroadcastReceiver 的类?
(**) 编辑:10 秒的内容在 BroadcastReceiver.onReceive()... 的文档中,特别是:
当它在主线程上运行时,你永远不应该在其中执行长时间运行的操作(在考虑接收器被阻塞和候选者被杀死之前系统允许的超时时间为 10 秒)。
【问题讨论】:
-
它在哪里说接收器在 10 秒后被“杀死”?
-
我在帖子中添加了参考
标签: android multithreading android-asynctask broadcastreceiver