Расписание AlarmManager Тревога при запуске приложения

Это очень тупой вопрос, и я до сих пор не могу понять, как AlarmManager работать в Android. Предположим, я хочу планировать повторяющиеся задания каждые полчаса. Я хочу запланировать это на мероприятии onCreate(), Я делаю что-то вроде этого:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        AlarmManager.INTERVAL_HALF_HOUR,
        AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);
}

Теперь мой вопрос: откуда ОС знает, что этот сигнал тревоги уже запланирован? Я имею в виду, что это не планирование нового каждый раз, когда деятельность создает, не так ли? В противном случае, после 10 запусков активности я буду получать тревогу каждые три минуты, а не полчаса. Пожалуйста, любой Android-гуру, объяснение проблемы.

1 ответ

Решение

Теперь мой вопрос: откуда ОС знает, что этот сигнал тревоги уже запланирован?

AFAIK, он ищет существующий сигнал тревоги для аналога PendingIntent, Здесь под "эквивалент PendingIntent", Я имею в виду:

  • та же операция (например, getBroadcast())
  • тот же идентификатор (второй параметр getBroadcast())
  • эквивалент Intent

Здесь под "эквивалент Intent"Я имею в виду, что они совпадают по всей информации о маршрутизации, которая в вашем случае является ComponentName генерируется из this а также AlarmReceiver.class, Дополнения, в частности, здесь не учитываются для эквивалентности.

Другие вопросы по тегам