バックグラウンドで実行され、リモートサーバーと通信し、必要に応じてユーザーに通知を表示するサービスを備えたAndroidアプリケーションがあります。このアプリには、ユーザーが操作するためのアクティビティもあります。
要件の1つは、アプリケーションが午前中に自動的に起動する必要があることです。1日の終わりに、ユーザーはアプリを自由に終了できます(終了機能はサービスを停止し、ウェイクロックを解放し、Androidにプロセスを強制終了させます)。アプリケーションを自動的に再起動するために、AlarmManagerとPendingIntentを使用してアラームをスケジュールしています。
//create intent to alert OnStartReceiver when alarm goes off
Intent i = new Intent(context, OnStartReceiver.class);
i.setAction("com.pointtrace.intents.alarm");
i.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION|Intent.FLAG_FROM_BACKGROUND);
//wrap inside PendingIntent so that it can be used from outside
//our application
PendingIntent pi = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Log.d("GXT", "Scheduling alarm action(i)=" + i.getAction());
//set alarm to go off at wake time
alarms.set(AlarmManager.RTC_WAKEUP, getWakeTime(), pi);
OnStartReceiverクラスはブロードキャストを受信するように登録されており、アラームが発生するとアプリを再起動します。
ユーザーがタスクマネージャーからアプリケーションを強制終了しない限り、すべてが正常に機能します。Android OSによって強制終了されるか、System.exit(0)を呼び出すことによって、アプリケーションが正常に終了した場合。正常に再起動します。しかし、タスクマネージャから強制終了されると、アラームがキャンセルされているように見えます。
Androidのドキュメントには、タスクマネージャーによってアラームがキャンセルされることを示唆するものは何も見つかりませんでした。アラームを正しく設定する方法に関して何か間違ったことをしていますか?
フラグを削除して0を使用してみましたが、違いはありませんでした。
ありがとう。