Важно (9.07.22)

Если картинки в постах не отображаются, зайдите в блог через прокси. РКН заблокировал поддомены blogger.com на которые загружались картинки.

понедельник, 12 июля 2021 г.

[Android Service] Сервисы в Android

Поговорим о 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"



Теперь поговорим подробнее об основных сервисах и рассмотрим простые примеры:



P.S. Так как материала очень много, я решил поделить его на части. Данная страница будет (надеюсь :) ) периодически обновляться. Надеюсь, я не зря потратил время на написание всего этого и после прочтения вам хоть немного поможет этот материал.

P.S.2. Если вы обнаружили ошибку, то пожалуйста, сообщите мне об этом.