Незважаючи на прийняту та прийняту на сьогодні відповідь, типи 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 (довгий)), тому час може непередбачувано стрибнути назад або вперед. Цей годинник слід використовувати лише тоді, коли важливим є листування з реальними датами та часом, наприклад, у календарі чи програмі-будильнику. Для вимірювання інтервалу або минулого часу слід використовувати інший годинник. Якщо ви використовуєте System.currentTimeMillis (), спробуйте прослухати ACTION_TIME_TICK, ACTION_TIME_CHANGED та ACTION_TIMEZONE_CHANGED трансляції намірів, щоб дізнатись, коли час змінюється.
Крім того, питання стосувалось лише тривог * _WAKEUP, але також дивіться документацію AlarmManager щодо цього, щоб переконатися, що ви розумієте, що забезпечують будильники проти непробудження.