0

これについて多くの質問があることは承知していますが、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();
        }
    }
}
4

1 に答える 1