特定の時間にアクティビティを起こしたい。そうするために、私は (また) AlarmManager を Boot complete BroadcastReceiver に登録しました。
私の知る限り、アクティビティを起こすためにバックグラウンドで生き続けることができるのは Service だけです。アクティビティと BroadcastReceiver は、非アクティブ時に終了する可能性があります。
私が持っている次のコードはサービスを実行していません。ただし、動作しているようです(24時間後に起動してもアラームが動作します)。これは安全ですか?それとも、サービスを開始する必要がありますか? これが安全に使用できる場合、この背後にあるロジックは何ですか? BroadcastReceiver によって作成された AlarmManger が Android ライフサイクル マネージャーによって破棄されないのはなぜですか?
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
registerAlarm(context);
}
}
private void registerAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am =(AlarmManager)context.getSystemService(Activity.ALARM_SERVICE);
long nextAlarm = System.currentTimeMillis() + 10000; //Some time later.
am.set(AlarmManager.RTC_WAKEUP, nextAlarm, pendingIntent);
}
}