Не могли бы вы помочь мне понять, какова разница между IntentService
и Service
?
В чем разница между IntentService и службой?
Ответ 1
Короче говоря, Служба - это более широкая реализация для разработчика для создания фоновых операций, в то время как IntentService полезна для операций "огонь и забвение", заботясь о создании и очистке фона.
Из документов:
Сервис Служба - это компонент приложения, представляющий либо приложение, желающее выполнить более длительную работу, не взаимодействуя с пользователем, либо предлагая функциональные возможности для использования другими приложениями.
IntentService
Служба является базовым классом для IntentService Службы, которые обрабатывают асинхронные запросы (выраженные как намерения) по требованию. Клиенты отправляют запросы через вызовы startService(Intent)
; служба запускается по мере необходимости, обрабатывает каждое намерение по очереди с использованием рабочего потока и останавливается при завершении работы.
Обратитесь к этому документу - http://developer.android.com/reference/android/app/IntentService.html
Ответ 2
Service
- базовый класс реализации службы. Service
запускается в основном потоке приложения, что может снизить производительность приложения. Таким образом, IntentService
, который является прямым подклассом Сервиса, доступен для упрощения.
IntentService
используется для выполнения определенной задачи в фоновом режиме. После этого экземпляр IntentService
автоматически завершается. Примерами его использования могут быть загрузка определенного ресурса из Интернета.
Различия
-
Service
класс использует основной поток приложения, аIntentService
создает рабочий поток и использует этот поток для запуска службы. -
IntentService
создает очередь, которая передает одно намерение за раз доonHandleIntent()
. Таким образом, реализация многопоточности должна выполняться путем расширения классаService
. Для классаService
требуется ручная остановка с использованиемstopSelf()
. Между темIntentService
автоматически останавливается, когда заканчивается выполнение. -
IntentService
реализуетonBind()
, который возвращаетnull
. Это означает, чтоIntentService
по умолчанию не может быть привязан. -
IntentService
реализуетonStartCommand()
, который отправляет Intent в очередь иonHandleIntent()
.
Вкратце, есть только две вещи, чтобы использовать IntentService
. Во-первых, реализовать конструктор. А во-вторых, реализовать onHandleIntent()
. Для других методов обратного вызова супер нужно вызвать так, чтобы его можно было правильно отслеживать.
Ответ 3
Сервис: он работает в фоновом режиме в вашей системе. Например,
- Если вы отправились в гостиницу, и вы отдаете свой заказ на суп на сервер
- Сервер получает ваш заказ и отправляет шеф-повар
- Вы не знаете, как приготовлен суп на кухне и какие процессы необходимы для приготовления супа.
- Как только ваш заказ будет готов, сервер приносит вам суп.
фоновый процесс: шеф-повар, делающий суп
IntentService: - это последовательный сервис.. (i.e), когда вы заказываете множество продуктов питания за один раз на сервер, но сервер поставляет эти элементы один за другим и не доставляет их все сразу.
Ответ 4
См. Tejas Lagvankar сообщение об этой теме. Ниже приведены некоторые ключевые различия между Сервисом и IntentService и другими компонентами.
Ответ 5
Service
работает в одном потоке вашего приложения; когда вы расширяете Сервис, вы должны вручную создавать новые потоки для выполнения операций блокировки ЦП.
против
IntentService
является подклассом Service
, который генерирует поток для выполнения фоновой работы (нет необходимости создавать новый поток для выполнения операций блокировки ЦП).
Ответ 6
Сервис
- Задача без пользовательского интерфейса, но не должна длиться долго. Использовать Thread внутри службы для длительной задачи
- Вызов
onStartService()
- Сгенерировано из любого потока
- Работает на главной теме
- Может блокировать
main(UI
) поток
IntentService
- Длительная задача обычно не связана с основным потоком, если требуется общение, а затем выполняется обработчиком или широковещательной рассылкой
- Вызвать через намерение
- вызванный из основного потока (Intent получен в основном потоке, и рабочий поток отключен)
- Работает в отдельном потоке
- Мы не можем запускать задачу параллельно, и несколько намерений находятся в очереди на одном рабочем потоке.
Ответ 7
Service
: Работает в основном потоке, поэтому через несколько секунд ANR (Android не отвечает)
IntentService
: Service
с другим фоновым потоком, работающим отдельно, чтобы что-то сделать без взаимодействия с основным потоком.
Ответ 8
Различия
- Сервисный класс использует основной поток приложения, а IntentService создает рабочий поток и использует этот поток для запуска службы.
- IntentService создает очередь, которая передает одно намерение за раз в onHandleIntent(). Таким образом, реализация многопоточного потока должна выполняться путем непосредственного распространения класса сервиса.
- Для класса обслуживания требуется ручная остановка с использованием stopSelf(). Тем временем IntentService автоматически останавливается, когда в очереди нет намерений.
- IntentService реализует onBind(), который возвращает null. Это означает, что IntentService не может быть привязан по умолчанию.
- IntentService реализует onStartCommand(), который отправляет Intent в очередь и в onHandleIntent().
Ответ 9
Сервис
Это базовый класс для всех служб. Когда вы расширяете этот класс, важно, чтобы вы создали новый поток, в котором выполнялись все службы, потому что служба использует основной поток приложений по умолчанию, что может замедлить производительность любой активности вашего приложения.
IntentService
Это подкласс Сервиса, который использует рабочий поток для обработки всех начальных запросов по одному за раз. Это лучший вариант, если вы не требуете, чтобы ваша служба обрабатывала несколько запросов одновременно. Все, что вам нужно сделать, это реализовать onHandleIntent(), который получает намерение для каждого запроса на запуск, чтобы вы могли выполнять фоновое задание.
Различия
Класс службы использует основной поток приложения, а IntentService создает рабочий поток и использует этот поток для запуска службы. IntentService создает очередь, которая передает одно намерение за раз в onHandleIntent(). Таким образом, реализация многопоточного потока должна выполняться путем непосредственного распространения класса Service. Для класса обслуживания требуется ручная остановка с использованием stopSelf(). Тем временем IntentService автоматически останавливается, когда в очереди нет намерений. IntentService реализует onBind(), который возвращает null. Это означает, что IntentService не может быть привязан по умолчанию. IntentService реализует onStartCommand(), который отправляет Intent в очередь и в onHandleIntent().
Ответ 10
Услуга Intent является дочерней функцией службы
IntentService: если вы хотите загрузить кучу изображений в начале открытия своего приложения. Это одноразовый процесс и может очистить себя, как только все будет загружено.
Служба: Служба, которая будет постоянно использоваться для связи между вашим приложением и внутренним концом с помощью вызовов веб-API. Даже если это завершено с его текущей задачей, вы все еще хотите, чтобы это было несколько минут спустя, для большей коммуникации