从广播接收器启动异步任务

8
我想知道从广播接收器启动asynctask是否被认为是一种不好的做法?我基本上注册了Google的C2DM服务器,然后当我拦截到onregistered广播接收器时,我想将其发送到我的服务器。
最佳完成此操作的方法是什么?
2个回答

18

是的,这被认为是不好的做法。这是因为如果你从BroadcastReceiver启动AsyncTask,而且当onReceive()返回时没有其他活动组件运行,Android可能会杀死你的进程。

正确的方法是从BroadcastReceiver启动Service。而且这个Service应该管理AsyncTask。这样Android将了解活动组件并且不会过早地将其杀死(除非出现其他关键条件,如内存不足条件)。


1
如果您在异步任务中引用了应用程序上下文,系统在onReceive()返回后仍然可能会终止进程吗? - 500865
进程被杀死的概率与谁引用了该进程内部的什么内容完全无关。被杀死的概率高度依赖于进程中当前激活的组件以及它们所处的生命周期阶段。 - inazaruk
1
兄弟,能否详细说明一下“如果onReceive()返回并且没有其他活动组件运行,则杀死进程”的内容?有相关文档吗? - ericlee

2

从Honeycomb开始,您可以调用goAsync(),然后您有大约10秒的时间异步完成工作。

使用示例可以在这里展示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接