Дальнейшее объяснение IntentService

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

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

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

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

Спасибо,

лучей.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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