Skip to main content

Сервисы

Android Service Component (in progress)#

Services overview.

Виды сервисов#

Сервисы - один из компонентов андроида. Все сервисы деляться на два вида: Foreground и Background.

Foreground - сервис выполняет функционал заметный для пользователя, и может продолжать работу даже если пользователь свернул приложение. Например проигрывать музыку, или отображать плавающее окошко с видео. Сервис обязан показать плашку уведомления о том, что он работает, это уведомление нельзя убрать пока сервис запущен. Для использования Foreground сервиса требуется специальный пермишен

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

И foreground и Background сервисы запускается на main потоке

Background - сервис выполняет функционал скрытый от пользователя. Начиная с API-26 фоновые сервисы имеют некоторые ограничения при свернутом приложении, например они не могут получить геолокацию

Хотя IntentService и запускается на главном потоке, но для обработки onHandleIntent он запускает отдельный поток. Аналогично JobIntentService обрабатывает enqueueWork на отдельном потоке

Не зависимо от вида сервиса он должен быть объявлен в манифесте приложения

Как и любой андроид компонент сервис является точкой входа в приложение, помимо этого при нехватке памяти в первую очередь система избавится от приложений не имеющих сервисы

Запуск сервиса#

Сервис можно запустить двумя способами: через startService() или через bindService()

Разница состоит в том, что при запуске через bindService() сервис будет жить до тех пор пока у него есть хотябы один подписчик, после того как от сервиса отпишутся все подписчики он будет уничтожен. При запуске через startService() сервис будет жить не зависимо от количества подписчиков, пока не будет вызвана команда для его остановки. Жизненный цикл сервиса не зависит от жизненного цикла компонента который его запустил. Если сервис был запущен через startService(), на него все равно можно подписаться

Обращение к сервису из другого процесса#

Обращение к сервису из другого процесса возможно, для этого следует использовать Android Interface Definition Language

Примеры использования сервисов#

Сервис для скачивания файлов Сервис в своем потоке скачивает файлы, может сообщать процент скачивания для отображения прогресса в активити

Стартовый сервис helga Сервис проверяет авторизацию пользователя, запускает остальные сервисы приложения(ожидание звонков, сервис для нотификаций календаря и др.)

Сервис для приема входящих звонков При входящем звонке показывает плавающее окно-уведомление

Сервис для мониторинга геолокации Foreground сервис для отслежтвания геолокации