Foreground service на Android — нюансы
Android 14 ввёл типы foreground services. Если приложение использует фоновую работу — там есть подводные камни.
Foreground service — это сервис, который Android не убивает в фоне (в отличие от обычного). Используется для геолокации в дороге, плеера, загрузки файлов.
В 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 или экспедиционный. Меньше геморроя с правилами.