Android 是否有任何理由继续使用IntentService处理GCM消息?

Android 是否有任何理由继续使用IntentService处理GCM消息?,android,push-notification,broadcastreceiver,google-cloud-messaging,intentservice,Android,Push Notification,Broadcastreceiver,Google Cloud Messaging,Intentservice,正如你所知,谷歌最近更改了他们的GCM文档,他们声称不再需要IntentService来处理到达的GCM消息。所有处理都可以在广播接收器中完成 当我试图找出是否有充分的理由继续使用IntentService时,我遇到了以下问题: WakefulBroadcastReceiver将处理GCM消息的工作转交给的一种服务(通常是IntentService),同时确保设备在此过程中不会返回睡眠状态包含IntentService是可选的-您可以选择在常规广播接收器中处理您的消息,但实际上,大多数应用程序将

正如你所知,谷歌最近更改了他们的GCM文档,他们声称不再需要
IntentService
来处理到达的GCM消息。所有处理都可以在
广播接收器中完成

当我试图找出是否有充分的理由继续使用
IntentService
时,我遇到了以下问题:

WakefulBroadcastReceiver将处理GCM消息的工作转交给的一种服务(通常是IntentService),同时确保设备在此过程中不会返回睡眠状态包含IntentService是可选的-您可以选择在常规广播接收器中处理您的消息,但实际上,大多数应用程序将使用IntentService

为什么大多数应用程序会使用
IntentService
?是否存在直接在
BroadcastReceiver
中处理GCM消息不起作用的情况

为什么大多数应用程序会使用IntentService

因为响应消息所做的任何事情都很可能需要1-2毫秒以上的时间,这意味着您希望从主应用程序线程中完成这项工作。响应广播时执行此操作的常见模式是将工作委托给
IntentService

因此,如果您响应GCM信息的工作涉及:

  • 磁盘I/O
  • 进一步的网络I/O(例如,从Web服务检索附加数据)
  • 大量计算(如图像处理)

您可能需要使用
IntentService
来执行该工作。

谢谢您的回答!因此,如果我理解正确,如果对GCM消息的响应只涉及显示通知,那么就没有理由使用IntentService。我说得对吗?@Eran:假设您没有在显示
通知时进行磁盘I/O(例如,读取一些数据库信息以填充
通知
内容),那么这可能是安全的。@Commonware提交共享数据引用被视为I/O?@OfekRon:是的,但请注意
应用()
为I/O分叉自己的后台线程。
commit()
是同步的,理想情况下不在主应用程序线程上完成。类似地,如果您的请求是在此过程中第一次被请求,并且首选项必须从磁盘读取,则尝试获取
共享引用
对象(例如,
首选项管理器.getDefaultSharedReferences()
)可能会执行磁盘I/O。@Commonware您好,我的应用程序可以通过挂起的意图推送本地通知(不是GCM通知)当应用程序停留在前台,但当应用程序在后台运行时无法推送通知(
onPause
),android系统会限制它吗?我是否需要
Intent服务
推送本地通知?