我开始使用Google的C2DM。此过程的一部分涉及在注册发生时接收广播意图。在Google's official C2DM documentation中,示例代码在BrodcastReceiver的onReceive()方法中显示以下注释:
// Send the registration ID to the 3rd party site that is sending the messages.
// This should be done in a separate thread.
然而,我读过的所有内容,包括the documentation for BroadcastReceiver,都表明从onReceive()开始一个线程几乎肯定会引起问题,因为只要onReceive()返回,该过程很快就会被杀死
有人可能犯了一个错误,而且我应该忽略关于使用单独线程的评论,但我猜他们说这是有原因的,即使它有误导性。
有没有理由在返回之前不能或不应该使用与onReceive()相同的线程中的网络?如果这样做有问题,那么即使在C2DM之外,处理必须是常见情况的正确方法是什么?开始服务?
答案 0 :(得分:3)
好的,在做了一些研究之后,我发现this question和the selected answer表明onReceive()
在UI线程上运行。我没有想过 - 因为这是一个Manifest声明的接收器,据我所知, 没有UI线程。
由于您无法在Android上的UI线程上进行联网,因此我回答了问题的第一部分:
onReceive()
发起网络通信。我们在UI线程上使它几乎看起来像ASyncTask是合适的,但这与手动启动另一个线程有同样的问题。所以似乎Service
是唯一的选择。