Выбор ответа Senior Многопоточность и WorkManager обновлено
Точное время выполнения
Вопрос
Нужно показать напоминание ровно в указанное пользователем время, даже в режиме Doze. Что использовать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: AlarmManager.setExactAndAllowWhileIdle с правом на точные будильники. WorkManager не гарантирует точное время, система откладывает работу.
Варианты ответа
PeriodicWorkRequestс интервалом 1 день и ограничением на зарядAlarmManager.setExactAndAllowWhileIdleс правом на точные будильникиправильный ответHandler.postDelayedв Application с нужной задержкой до времени- Корутина с
delayвviewModelScopeдо нужного момента времени
Разбор
WorkManager не гарантирует точное время, система откладывает работу. Точные будильники дают setExact* у AlarmManager, а вариант AllowWhileIdle срабатывает и в Doze. С Android 12 для этого нужен доступ к точным будильникам (SCHEDULE_EXACT_ALARM или USE_EXACT_ALARM для будильников и календарей), с Android 14 первый не выдаётся по умолчанию большинству приложений. Handler и корутины не переживут смерть процесса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.