Несмотря на принятый в настоящее время и одобренный ответ, типы AlarmManager.ELAPSED_REALTIME * вместе с SystemClock.elapsedRealtime () всегда были более надежными, чем часы RTC для сигналов тревоги и времени.
Использование ELAPSED_REALTIME_WAKEUP с AlarmManager будет основываться на монотонных часах, начиная с момента загрузки, « и продолжает тикать, даже когда ЦП находится в режимах энергосбережения, поэтому это рекомендуемая основа для интервалов времени общего назначения ». Так,
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()
+ 60*1000, pendingIntent);
заставит ваш PendingIntent сработать за 1 минуту (60 * 1000 миллисекунд).
Принимая во внимание, что AlarmManager.RTC_WAKEUP - это стандартное время «стены» в миллисекундах с начала эпохи. Так,
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ 60*10000, pendingIntent);
может также вызвать тревогу через 60 секунд, но не надежно, потому что, как указано в документации SystemClock :
Настенные часы могут быть установлены пользователем или в телефонной сети (см. SetCurrentTimeMillis (long)), поэтому время может непредсказуемо прыгать назад или вперед. Эти часы следует использовать только в том случае, если важно соответствие с реальными датами и временем, например, в приложении календаря или будильника. Измерения интервалов или прошедшего времени должны выполняться с использованием других часов. Если вы используете System.currentTimeMillis (), рассмотрите возможность прослушивания трансляций намерений ACTION_TIME_TICK, ACTION_TIME_CHANGED и ACTION_TIMEZONE_CHANGED, чтобы узнать, когда меняется время.
Кроме того, вопрос касается только сигналов тревоги * _WAKEUP, но также см. Документацию по AlarmManager , чтобы убедиться, что вы понимаете, что предоставляют сигналы пробуждения и не пробуждающие.