Что такое foreground и background сервисы в Android
Что проверяют
Знаете ли вы, что фоновые сервисы жёстко ограничены с Android 8, и понимаете ли, чем их заменяют.
Как отвечать
Foreground-сервис работает с постоянным уведомлением, которое видит пользователь. Система относится к нему как к активной работе и почти не убивает. Требует разрешения, а с Android 14 ещё и объявления типа (воспроизведение, местоположение, синхронизация и так далее) в манифесте, причём тип должен соответствовать реальной задаче.
Background-сервис работает без уведомления. С Android 8 приложение, находящееся в фоне, не может его запустить, а уже запущенный останавливается через несколько минут после ухода приложения из видимости. Плюс режим Doze и ограничения на приложения в ожидании. Фактически как инструмент он вытеснен.
Чем заменяют:
- WorkManager: работа, которая должна выполниться гарантированно, но не обязательно сейчас: синхронизация, выгрузка, отправка событий. Переживает перезагрузку, умеет условия и повторы;
- корутины в области экрана: работа, живущая столько же, сколько экран;
- foreground-сервис: только то, что пользователь осознанно запустил и видит.
Правило выбора: пользователь должен видеть, что процесс идёт, значит foreground-сервис; работа отложенная и надёжная, значит WorkManager; работа привязана к экрану, значит корутина.
Где спотыкаются
Пытаются делать периодическую синхронизацию фоновым сервисом и не понимают, почему на реальном устройстве она не запускается.
Считают, что сервис сам создаёт поток: он работает в главном.
Забывают вызвать startForeground в течение отведённых секунд после запуска и получают падение.
Указывают тип сервиса, не соответствующий работе, и приложение отклоняют в магазине.