Любой компонент приложения может запустить сервис, который продолжит работу, даже если пользователь перейдет в другое приложение.
Примеры использования сервисов: проигрывание музыки, трекинг локации водителя в приложении такси, загрузка файла из сети.
Сервисы делятся на два вида по способу использования: Started и Bound, и на два вида по способу взаимодействия с пользователем: Background и Foreground.
Когда спрашивают о видах сервисов обычно имеют в виду способ использования.
Started Service Запускается методом startService(Intent intent). Intent должен быть явным (explicit), это значит, что при создании объекта
Intent
было передано имя класса сервиса. После запуска сервиса вызывается метод onStartCommand().
Остановить сервис можно вызовом метода stopSelf() из самого сервиса или методом stopService() из другого компонента.
Bound Service привязывается к компоненту вызовом метода bindService(Intent service, ServiceConnection serviceConnection, int flags).
Аргумент
serviceConnection
используется для взаимодействия с привязанным сервисом. Сервис стартует после вызова bindService()
, если аргумент flags
имеет значение BIND_AUTO_CREATE. После вызова
bindService()
у сервиса вызывается метод onBind().Для отвязывания компонента от сервиса используется метод unbindService(). У сервиса вызывается метод onUnbind().
Если у сервиса больше нет привязанных компонентов, вызывается метод onDestroy().
Компонент может быть привязан к сервису, запущенному методом
startService()
. В этом случае сервис относится сразу и к Started и к Bound.Bound и Started сервисы важно различать, потому что у них разные жизненные циклы.
Подробная статья про сервисы.