我知道有很多关于此的问题,但每次问题都是因为他们通过应用程序管理器“强制杀死”他们的应用程序。
这不是我的情况。
我运行一个服务,它应该处理 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();
}
}
}