0

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

这不是我的情况。

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

如果我启动另一个真正渴望 RAM 的应用程序,比如游戏之类的东西,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();
        }
    }
}
4

1 回答 1

0

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

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

于 2017-03-23T07:28:30.580 回答