Поговорим о Android сервисах. Для тех, кто уже знаком с сервисами, чего-то нового вряд ли тут найдёте. Хочу сразу предупредить, я не эксперт в этой теме и просто попытался собрать и описать для вас как можно больше информации. Т.к. материала очень много, то эта статья является отправной точкой.
Сервис (служба) – это приложение без пользовательского интерфейса. Предназначено для выполнения задач в фоне.
Типы сервисов:
- Started (Unbounded Service) - Эта служба запускается с помощью Android приложения. Служба может работать в фоновом режиме неограниченное время, даже если приложение закрыто.
- Bound - Эта служба работает только тогда, когда она связана с Android приложением. Между приложением и службой существует взаимодействие (client-server), и оно остается активным, пока приложение не отвяжется. К одной и той же службе можно привязать несколько приложений.
- IntentService - Запускается в отдельном потоке. Самоуничтожается после завершения выполнения поставленной задачи. Чаще всего используется для выполнения одноразовых задач (например, нужно скачать большой файл). Если сервис чем-то занят, то при повторном запуске будет создана очередь и последовательно выполнена. Сервис будет висеть в памяти пока задача не будет выполнена, прервать работу сервиса нельзя.
Примечание 1. Служба может быть одновременно Started и Bound.
Также сервисы могут быть:
- Локальными (Local Service, в манифесте приложения помечается как android:exported="false") – сервис предназначен только для использования в вашем приложении.
- Удалённым (Remote Service, в манифесте приложения помечается как android:exported="true") – сервис может использоваться другими приложениями.
Различия по принципу взаимодействия с пользователем:
- Фоновый сервис (Background Service) – работает в фоне, не требует взаимодействия с пользователем. По умолчанию, все создаваемые сервисы относятся к этому варианту. Система может «убить» такой сервис, когда, например, посчитает его не нужным или при нехватке свободной оперативной памяти.
- Служба переднего плана (Foreground Service) – требует, чтобы пользователь был оповещён о работе данного сервиса при помощи постоянного уведомления в панели уведомлений. Имеет больший приоритет, чем фоновый сервис. Сообщает системе, что убивать этот сервис нельзя.
Основные методы у сервисов:
- Started: onCreate() -> onStartCommand() -> onDestroy()
- Bound: onCreate() -> onBind() -> onUnbind(), onRebind() -> onDestroy()
- IntentService: onCreate() -> onHandleIntent()-> onDestroy()
Как создать/добавить проект сервиса в FMX приложение:
- Создать проект сервиса можно через Мастер создания сервиса
- Добавить/удалить проект сервиса можно через Менеджер проектов
Примечание 2. Всегда сохраняйте проект сервиса в отдельную папку
Примечание 3. Не называйте проект службы как "Service"
Теперь поговорим подробнее об основных сервисах и рассмотрим простые примеры:
- Пример Started сервиса
- Пример Bound сервиса
- Пример Foreground Service
P.S. Так как материала очень много, я решил поделить его на части. Данная страница будет (надеюсь :) ) периодически обновляться. Надеюсь, я не зря потратил время на написание всего этого и после прочтения вам хоть немного поможет этот материал.
P.S.2. Если вы обнаружили ошибку, то пожалуйста, сообщите мне об этом.