如果应用程序未运行,GCMIntentService(extends GCMBaseIntentService)不会收到通知。
来自:http://developer.android.com/about/versions/android-3.1.html
启动已停止应用程序的控件 请注意,系统将FLAG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图。这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。后台服务或应用程序可以通过将FLAG_INCLUDE_STOPPED_PACKAGES标志添加到应允许激活已停止的应用程序的广播意图来覆盖此行为。
有没有办法解决这个问题? 感谢
答案 0 :(得分:22)
如果应用程序未运行,GCMIntentService(extends GCMBaseIntentService)不会收到通知。
是的,它会的。但是,问题的其余部分与应用程序是否正在运行无关,而是与用户之前是否已经运行相关。 “停止”这个词在你引用的段落中的意思不是“不运行”,而是表示申请所处的状态:
首次安装时,在手动调用组件之前(例如,用户启动活动)
用户强制停止应用后,直到手动调用某个组件(例如,用户启动活动)
(而且我真的希望他们能够提出一个比“停止”更加独特的形容词......)
有没有办法解决这个问题?
没有。如果用户强制停止您的应用,则表示他们不希望您的应用因任何原因再次运行,直到他们再次手动启动它为止。您的目标是让用户没有理由强制停止您的应用。请注意,我的意思是“强制停止”(即,从“设置”中按“强制停止”按钮) - 普通任务管理器,或从Android 4.x中的“近期任务”列表中滑动,不会产生此效果。
答案 1 :(得分:2)
Francesco Nerieri在this android-gcm thread中说:
因此,如果您强制停止应用程序,则ICS的预期行为适用于 应用程序不接收消息。在JB中,这意味着GCM也将 取消注册应用程序,这是一个不幸的行为,我们是 努力改变这一点(JB中的取消注册部分)。