Вы поставили будильник на семь утра, а проснулись в девять. Телефон включён, громкость на месте, будильник в списке. Обычно в такой момент ругают приложение, и иногда справедливо. Но нередко телефон сам не дал ему зазвонить.

Ниже объясняю, как это устроено изнутри. Настройки по шагам для каждой марки я вынес на отдельную страницу: почему не срабатывает будильник на Android.

Как будильник вообще звонит

Приложение-будильник не работает всю ночь. Оно просит систему разбудить его в 7:00 и закрывается. Такую запись в системе я дальше называю сигналом. В семь утра система запускает его заново, и только тогда оно включает звук и показывает экран.

Значит, ночью будильник целиком зависит от системы. Если она забыла о просьбе или решила выполнить её попозже, приложение об этом даже не узнает.

Что придумал сам Android

Начиная с Android 6 в системе есть режим экономии Doze. Когда телефон лежит неподвижно с выключенным экраном, система откладывает фоновую работу приложений и выполняет её пачками. Для будильников сделано исключение: есть особый способ поставить сигнал, который система обязана выполнить минута в минуту. Его видно снаружи: в строке состояния появляется значок будильника.

С годами правила ужесточались:

  • в Android 12 для точных сигналов появилось отдельное разрешение "Будильники и напоминания", и человек может его отозвать;
  • в Android 13 приложению понадобилось разрешение на уведомления, а экран звонка поднимается как раз через уведомление;
  • в Android 14 показ на весь экран поверх блокировки оставили по умолчанию только приложениям для звонков и будильникам.

Всё это честные правила: они описаны, и приложение может им следовать.

Что добавляют производители

Почти каждый производитель ставит поверх Android свою экономию батареи. Общего описания у неё нет, она меняется от версии к версии, и приложение не может ни узнать о ней заранее, ни отключить её само. Чаще всего встречаются четыре механизма.

Запрет автозапуска. После перезагрузки телефона все поставленные сигналы стираются, и приложение должно поставить их заново. Для этого система будит его сразу после загрузки. На Xiaomi, Oppo и Vivo стороннему приложению такой запуск по умолчанию запрещён, а на Huawei его разрешает или запрещает сама система. Телефон обновился ночью и перезагрузился, будильник молчит.

Очистка памяти. Кнопка закрытия всех приложений в списке недавних на чистом Android просто убирает окна. На части прошивок она останавливает приложение принудительно, а принудительная остановка стирает его сигналы. Вернутся они, только когда вы снова откроете приложение.

Спящие приложения. Samsung переводит в спящий режим приложения, которые давно не открывали. Будильник легко попадает в спящие: его ставят один раз и неделями не трогают. По данным проекта Don't kill my app, на части версий хватало трёх дней.

Ограничение фона. "Контроль активности" у Xiaomi, "Запуск приложений" у Huawei, ночная экономия батареи у Realme. Называются по-разному, а делают одно: решают за вас, каким приложениям можно проснуться при выключенном экране.

Почему встроенные часы звонят

Производитель заранее внёс свои приложения в список исключений. На его часы не действуют ни контроль активности, ни запрет автозапуска. Скачанному будильнику те же права нужно выдать вручную.

Поэтому довод "встроенный же звонит" ничего не говорит о стороннем приложении.

Что может сделать приложение

Немного, но кое-что может. В Будильнике Кроха я сделал так:

  • сигнал ставится тем самым особым способом, который система не откладывает, а рядом стоит запасной, на 15 секунд позже;
  • сигналы пересчитываются после перезагрузки, после обновления приложения, при переводе часов и каждый раз, когда вы открываете список будильников;
  • звук идёт по каналу будильников, поэтому беззвучный режим его не глушит;
  • если телефон был выключен и включился в течение 15 минут после времени сигнала, будильник прозвонит сразу, а если позже, оставит отметку о пропуске.

Чего приложение не может: выдать себе автозапуск, вынуть себя из спящих, отменить чужую экономию батареи. Оно может только показать, что не так, и довести до нужного экрана. Для этого в Крохе есть экран "Почему будильник может не сработать": он проверяет разрешения и ограничения батареи на вашем телефоне, а кнопка рядом с каждой проверкой открывает нужную настройку.

Экран "Почему будильник может не сработать": точные будильники разрешены, уведомления разрешены, показ поверх приложений в порядкеЭкран проверки в Будильнике Кроха. Напротив каждой строки статус и кнопка, которая ведёт в системную настройку

Что сделать вам

Три вещи на любом телефоне:

  1. Откройте сведения о приложении-будильнике и выберите для батареи вариант без ограничений.
  2. На Android 12 и новее откройте раздел "Будильники и напоминания": если ваш будильник есть в списке, переключатель должен быть включён.
  3. Разрешите приложению уведомления.

Дальше идут настройки конкретной марки, у каждой свои. Я собрал их по шагам, с путём по меню:

После крупного обновления системы пройдитесь по списку ещё раз: иногда оно возвращает настройки экономии в исходное состояние.

Сведения об ограничениях прошивок я сверял с проектом Don't kill my app! (Urbandroid Team, лицензия CC BY 4.0). Если на вашем телефоне пункты называются иначе или шаги не помогли, напишите в чат канала в Telegram или в MAX: поправлю страницу.