Дальнейшее объяснение о IntentService - PullRequest
11 голосов
/ 15 июня 2010

Я пытался получить назначение IntentService, и когда мне его использовать?

Я пытался понять из API, но недостаточно подробностей об этом.

Есть ли какая-либо аналогия между этим и выполнением длинной задачи в рабочем потоке?

Любое дальнейшее объяснение и примеры того, почему я бы использовал IntentService, было бы очень желательно.

Спасибо,

Луч.

Ответы [ 3 ]

13 голосов
/ 15 июня 2010

Есть ли аналогия между этим и выполнением длинной задачи в рабочем потоке?

IntentService обрабатывает поток для вас.

когдая должен использовать это?

Некоторые случаи использования:

  • Для обработки сигналов тревоги, вызванных AlarmManager
  • Для обработки других событий, перехваченных манифестомзарегистрирован BroadcastReceiver
  • Для обработки событий, вызванных виджетом приложения (обновления по времени, нажатия кнопок и т. д.)
2 голосов
/ 10 мая 2012

Сервисы Android являются рабочими лошадками платформы.Они позволяют приложениям выполнять долго выполняющиеся задачи и предоставляют функциональность внешним приложениям.К сожалению, поскольку они работают в фоновом режиме и не являются визуально очевидными для разработчиков, они могут стать источником головной боли.Если вы видели ANR (действие не отвечает) или задались вопросом, почему служба работала, когда она не должна быть, проблема может быть в плохо реализованной службе.

Ужасный ANR Давайте рассмотрим дваОсновные ошибки, которые вызывают службы: ANR.Это нарушает работу пользователя и дает пользователю возможность принудительно закрыть его.Это может привести к тому, что пользователь удалит ваше приложение или фоновый процесс будет прерван.Причина этого заключается в том, что службы запускаются из вашего вызывающего потока - обычно это поток пользовательского интерфейса.Всегда работающие сервисы.Хотя Android предоставляет механизмы для планирования и остановки служб, не все разработчики следуют рекомендациям.На самом деле, многие примеры, которые я видел, даже не упоминают об остановке вашего сервиса.Это может привести к снижению общей производительности, путанице среди пользователей и разрядке аккумулятора.Я предполагаю, что разработчики Android в Google увидели, что это становится проблемой, и представили класс IntentService в Android 1.5.Класс IntentService решает вышеуказанные проблемы и абстрагирует все управление потоками и остановкой службы от разработчика.Это очень простой и мощный способ выгрузки задач из основного потока приложения.

0 голосов
/ 13 ноября 2013

Я бы использовал его всякий раз, когда сценарий использования является конкретной задачей, которая займет много времени, но имеет регулярное завершение.Например, варианты использования, описанные выше, а также такие обычные задачи, как: -syncing -downloading ресурсы-сбор данных из различных источников и их хранение

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...