Разница между обычным фоновым сервисом и фоновым, ограниченным (restricted) сервисом, появилась с Android 8.0 (API 26).
Обычный фоновый сервис:
- Может работать неограниченное время в фоновом режиме.
- Система может его завершить при нехватке ресурсов, но он может быть перезапущен, если было возвращено
START_STICKY в onStartCommand().
- Не требует от пользователя видимых уведомлений (хотя это не лучшая практика с точки зрения UX).
- Может потреблять значительные ресурсы батареи и CPU.
Ограниченный фоновый сервис (применяются ограничения):
- Служба, запущенная в фоновом режиме при отсутствии видимых активностей или других "белых списков" (привилегированных условий), сталкивается с ограничениями на использование ресурсов.
- Основные ограничения включают:
- Ограничение на работу в фоновом режиме: Сервис может быть остановлен системой через короткое время (обычно несколько минут) после того, как приложение переходит в фоновый режим.
- Запрет на запуск новых фоновых сервисов: Фоновое приложение не может запускать новые фоновые сервисы с помощью
startService(). Вместо этого следует использовать JobScheduler или WorkManager.
- Ограничение на получение широковещательных сообщений: Неявные широковещательные сообщения (implicit broadcasts) в манифесте будут проигнорированы. Приложение должно явно регистрировать широковещательные приемники или использовать JobScheduler/WorkManager для обработки событий.
- Цель этих ограничений — улучшить время работы от батареи и производительность устройства, ограничивая нерациональное использование ресурсов фоновыми приложениями.
Как сервис становится неограниченным (активным в глазах системы):
- Приложение находится на переднем плане (пользователь активно с ним взаимодействует).
- Приложение запускает видимый сервис (foreground service), который демонстрирует постоянное уведомление пользователю.
- Приложение выполняет определенные задачи (например, обработка широковещательных сообщений, выполнение JobScheduler задач), которые временно выводят его из состояния полной иррациональной фоновой работы.
Основное отличие: С Android 8.0 и выше, сервис, работающий в фоновом режиме без видимой активности пользователя или видимого сервиса, будет ограничен системой в плане доступа к ресурсам и возможности длительной работы. Обычный "фоновый сервис" до Android 8.0 мог работать без таких строгих ограничений.