私の Android アプリでは、AlarmManager からの繰り返しアラームを使用してサービスを開始します。すべて正常に動作します。ただし、システム設定に移動すると、サービスが処理を完了して停止している場合でも、アプリが実行されていることに気付きます。システムがまだ実行中であると表示される理由がわかりません。システム設定でアプリを強制終了して強制停止すると、アラームが繰り返されなくなります。アラームを設定するコードは次のとおりです。
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent("myapp.START_MONITORING");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), elapsedTime, pi);
サービスを開始するには、次のことを行います。
Intent intent = new Intent(context, MyService.class);
ContextWrapper cw = (ContextWrapper) context;
cw.startService(intent);
アラームの設定とサービスの開始に使用されるコンテキストは同じであることに注意してください。それらは同じ方法にあります。AlarmManager がアラームを起動するたびに、コンテキストがこのメソッドに配信されます。サービスの実行中にアプリを強制終了すると、理論的には、次の間隔でサービスが再開されるはずです。しかし、私は、AlarmManager がこのコンテキストを追跡しているのではないかと疑っています。サービスが停止した場合、おそらくアラームも停止しています。
アラームから渡されたコンテキストではないコンテキストでサービスを開始する方法はありますか? そうすることで、アラームが殺されるのを防ぐことができるかもしれません。