Foreground service на Android — нюансы

Android 14 ввёл типы foreground services. Если приложение использует фоновую работу — там есть подводные камни.

Foreground service на Android — нюансы

Foreground service — это сервис, который Android не убивает в фоне (в отличие от обычного). Используется для геолокации в дороге, плеера, загрузки файлов.

Foreground service на Android — нюансы
Цепочка запуска foreground service в Android 14+.

В Android 14 (API 34) Google ужесточил правила:

  • Обязательно объявить тип сервиса в манифесте. location, mediaPlayback, dataSync, mediaProjection и т.д. Без типа сервис не запускается.
  • Каждому типу — свой permission. Например, FOREGROUND_SERVICE_LOCATION для геосервисов.
  • Запрет на запуск из фона. Сервис стартует только если приложение на переднем плане или есть исключения (push с high-priority, AlarmManager exact alarm).
  • Обязательное уведомление. Foreground service всегда показывает уведомление пользователю в течение секунд после старта.

Что обычно ломается:

  • Старый код, который запускал сервис из BroadcastReceiver — на Android 14 не работает.
  • Не указали permission — приложение крашится при попытке старта.
  • Уведомление foreground service пользователь скрыл — сервис убивается через 10 минут.

Альтернатива в новых проектах — WorkManager. Он сам выбирает, как запустить задачу: foreground, scheduled или экспедиционный. Меньше геморроя с правилами.