2015-07-16 2 views

ответ

29

1. Разница между службой и IntentService

службы: Это базовый класс для Android услуг, которые можно расширить для создания каких-либо услуг. Поскольку служба запускается внутри потока пользовательского интерфейса, для этого требуется создать рабочий поток для выполнения его работы.

IntentService: это подкласс Service, что упрощает вашу работу. Он работает уже в рабочем потоке и может получать асинхронные запросы. Таким образом, вам не нужно создавать его вручную или беспокоиться о синхронизации. Вы можете просто расширить его и переопределить метод:

onHandleIntent(Intent intent) 

, где вы можете управлять всеми входящими запросами.

Взглянув на documentation, вы можете увидеть в деталях, что IntentService сделать для вас:

  • Создает нить подсобник по умолчанию, который выполняет все намерения доставлены onStartCommand() отдельно от основного потока приложения.
  • Создает рабочую очередь, которая передает одно намерение за один раз до вашей реализации onHandleIntent(), поэтому вам не придется беспокоиться о многопоточности.
  • Остановка службы после обработки всех запросов на запуск, поэтому вам не нужно звонить stopSelf().
  • Обеспечивает реализацию по умолчанию onBind(), которая возвращает null.
  • Предоставляет реализацию по умолчанию onStartCommand(), которая отправляет намерение рабочей очереди, а затем в вашу реализацию onHandleIntent().

Так что, если вам нужно больше контроля вы можете использовать Service класс, но часто для простого обслуживания наилучшим решением является IntentService.

2. Разница между AsyncTask и услуг

Это два разных понятия.

Услуга: может быть предназначена для работы без интерфейса. Он подходит для длительных операций.

AsyncTask: - это особый класс, который обертывает рабочий поток (выполняет фоновые операции), облегчая взаимодействие с потоком пользовательского интерфейса, без непосредственного управления потоками или обработчиками.

+0

Есть хорошее объяснение здесь http://stackoverflow.com/a/15772151/1533670 – NPE

+0

Это объяснение хорошо, но если вы могли бы пойти в более подробно на AsyncTask (особенно минусы) было бы лучше. –

+0

Существует много чего сказать о 'AsyncTask', и для этого есть документация. Я старался держать его в курсе, просто указывая на различия с «Сервисом» – GVillani82

0

Короче говоря, услуга - это более широкая реализация для разработчика, позволяющая создавать фоновые операции, а IntentService полезна для операций «огонь и забыть», заботясь о создании и очистке фона.

Из документов:

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

IntentService IntentService - это базовый класс для служб, которые обрабатывают асинхронные запросы (выраженные как намерения) по требованию. Клиенты отправляют запросы через вызовы startService (Intent); служба запускается по мере необходимости, обрабатывает каждое намерение по очереди с использованием рабочего потока и останавливается, когда заканчивается работа.

Service vs IntentService

What is the difference between an IntentService and a Service?