これについて多くの質問があることは承知していますが、App Manager を介してアプリを「強制終了」していたため、毎回問題が発生しました。
これは私の場合ではありません。
GCM通知を処理するサービスを実行しています。サービスが実行されているときは、すべて正常に動作します!
しかし
本当に RAM を必要とする別のアプリを起動すると、たとえばゲームのようなもので、Android がサービスを強制終了します (後で RAM が問題でなくなったときにサービスを再起動するため)。
問題は、上記のゲームを開始し、ゲームの実行中に送信した場合 (サービスがデバイスによって強制終了されたと確信している場合 - Eclipse で実行中のプロセスを確認している場合)、メッセージが表示されないことです。 .. ゲームを停止するまで、3 ~ 4 分 (おそらく GC が来るまで) 待ってから、(サービスが再起動されたときに) GCM 通知を受け取ります。
アプリケーションのエントリ ポイントを見ると、GCM が通知を受け取ったからではなく、RAM 使用量がサービスを再開するのに十分なほど低かったため、サービスが再開されたと思われます。
それは 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();
}
}
}