OSがアプリケーションを終了させると、私のアラームが殺されます。私はそれがOSのアプリを殺したにもかかわらず、それが実行され続けるだろうというアラームのポイントの1つだと思った? "./adb shell dumpsys alarm"コマンドを使用してアラームの寿命を確認し、OSがアプリケーションを終了するたびにアラームも消えます。どのように私は私のアラームを起動します。OSがアプリケーションを終了するとアラームが鳴ります
public static void startLocationAlarm(Context context){
if(ActivityLifecycleHandler.isApplicationInForeground()) {
return; // If App is in foreground do not start alarm!
}
String alarm = Context.ALARM_SERVICE;
AlarmManager am = (AlarmManager) context.getSystemService(alarm);
Intent intent = new Intent(locationBroadcastAction);
PendingIntent pi = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0);
int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
long interval = ONE_MINUTE;
long triggerTime = SystemClock.elapsedRealtime() + interval;
am.setRepeating(type, triggerTime, ONE_MINUTE, pi);
}
いくつかのより多くのコンテキストを追加するには、私は、バックグラウンドでのサービス(ないIntentService)でいくつかの場所の操作を行いますしようとしています。ここに私の受信機があります。私がサービスが完了する前に殺されることを望んでいなかったので、Wakefulを使用しました。いくつかの詳細については
public class LocationBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(context, LocationServiceAlarmOwnGoogleClient.class);
//context.startW(myIntent);
LocationBroadcastReceiver.startWakefulService(context, myIntent);
}
}
:私は、ユーザーがバックグラウンドでそれをした後に戻ることができ、いくつかの活動のOnStart方法でアラームを解除してください。それがこの奇妙な行動を引き起こすかどうかは分かりません。ここに私の取り消し方法があります:
public static void stopLocationAlarm(Context context){
Intent intent = new Intent(locationBroadcastAction);
PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
これはデフォルトの動作です。 – Shaishav
「OSが私のアプリケーションを殺すたびに、アラームも消えています」 - 「OSが私のアプリケーションを殺す」という意味を詳しく説明してください。 – CommonsWare
@Shaishav Aaah、okey。私は、アプリケーションがOSによって殺されたとしても、Alarmsが生き続けると考えていたと思った。 OSがそれを殺しても、私はそれを生き続けることができますか? – Slagathor