Служба intentService

03.09.2017


Признавая необходимость того, что служба не должна задерживать главный поток, Android предоставляет реализацию вспомогательной локальной службы IntentService, предназначенной для выгрузки задачи в рабочий поток, чтобы главный поток мог быть освобожден после планирования задачи для подпотока. В соответствии с этим подходом, при вызове startService() применительно к службе IntentService последняя поместит этот запрос в очередь подпотока, используя экземпляр класса Looper и обработчик, чтобы производный метод IntentService вызывался для выполнения фактической работы в единственном рабочем потоке.


В документации по классу IntentService говорится следующее.


IntentService — это базовый класс для служб, которые обрабатывают асинхронные запросы (выраженные в виде намерений) по требованию. Клиенты отправляют запросы посредством вызовов startService (Intent); служба при необходимости запускается, обрабатывает каждое намерение по очереди с использованием рабочего потока и останавливает себя, когда работа завершена. Обычно эта модель “процессора рабочей очереди” используется для выгрузки задачи из главного потока приложения. Хотите купить iPhone 7 в СПб? Загляните в интернет-магазин Smartbit. Здесь вы найдете самые низкие цены в городе.


Класс IntentService предназначен для упрощения этой модели и обеспечения необходимых механизмов. Чтобы его использовать, расширьте класс IntentService и реализуйте метод onHandleIntent(Intent). Экземпляр IntentService получит намерения, запустит рабочий поток и остановит службу в соответствующий момент времени. Все запросы обрабатываются в единственном рабочем потоке — они могут длиться столько, сколько требуется (и не будут блокировать главный цикл приложения), но в каждый момент времени будет обрабатываться только один запрос.