Android 是否有任何理由继续使用IntentService处理GCM消息?
正如你所知,谷歌最近更改了他们的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是可选的-您可以选择在常规广播接收器中处理您的消息,但实际上,大多数应用程序将
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服务
推送本地通知?