Какие типы сервисов в Android существуют и их особенности
Что проверяют
Знаете ли вы, что фоновые сервисы давно ограничены системой, и понимаете ли, чем их заменили.
Как отвечать
По видимости и способу запуска:
- Foreground service: работает с постоянным уведомлением, система его почти не убивает. Для того, что пользователь видит и понимает: музыка, навигация, запись трека. С Android 14 обязателен тип сервиса в манифесте и соответствующее разрешение;
- Background service: без уведомления. С Android 8 приложение в фоне не может его просто так запустить, а запущенный останавливается через несколько минут. Практически вытеснен;
- Bound service: живёт, пока к нему привязан хотя бы один клиент. Нужен для взаимодействия с компонентом через интерфейс, в том числе межпроцессного через AIDL.
По способу старта: startService (сам решает, когда закончить, отсюда stopSelf) и bindService (жизнь по клиентам). Оба варианта могут сочетаться.
Важно, что сервис работает в главном потоке: свой поток или корутину заводите сами, иначе получите зависание интерфейса.
Что вместо фонового сервиса сегодня: WorkManager для отложенной и гарантированной работы с условиями (сеть, зарядка), JobScheduler под ним, корутины и Flow внутри viewModelScope для работы, связанной с экраном.
Где спотыкаются
Считают, что сервис создаёт поток.
Пытаются делать периодическую синхронизацию фоновым сервисом и не понимают, почему на реальном устройстве она не запускается.
Забывают вызвать stopSelf и оставляют сервис висеть.
Не знают про типы foreground-сервиса и ловят отказ на новых версиях системы.