Android GCM在服务被杀死时未收到通知

时间:2013-10-24 23:23:44

标签: android service android-c2dm google-cloud-messaging

我知道有很多关于此的问题,但每次问题都是因为他们通过应用管理器“强行杀死”他们的应用。

这不是我的情况。

我运行一个应该处理GCM通知的服务。 当服务运行时,一切正常!

但是

如果我推出另一个真正渴望内存的应用程序,让我们说像游戏这样的东西,Android会终止我的服务(为了以后在RAM不再是问题时重启它)。

问题是,如果我开始上述游戏,并在游戏运行时发送(当我确定服务已被设备杀死时 - 查看Eclipse上运行的进程),它就不会得到任何消息...... 直到我停止游戏,等待3-4分钟(可能是为了让GC出现)然后,只有这样(当服务重新启动时)我得到GCM通知。

该应用程序的入口点让我认为该服务已重新启动,因为RAM使用率足以启动我的服务,而不是因为GCM收到通知。

这是GCM通知系统的正常行为吗? 我收到GCM通知后,他们是否可以通过任何方式运行服务?

以下是清单中的内容:

<receiver
        android:name="com.my.package.service.C2DMMessageReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>

        <category android:name="com.my.package.service"/>
    </intent-filter>
</receiver>

这是整个班级C2DMMessageReceiver:

public class C2DMMessageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) {
            Log.d("C2DM", "#### GOT PUSH ####");
            Communication2.getInstance().reconnect();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是默认设计。从Android 3.1及更高版本开始,根据以下条件,从任务或应用程序管理器中删除的任何应用程序用户都不会收到任何广播的意图....

https://developer.android.com/about/versions/android-3.1.html#launchcontrols