Когда использовать Службу или AsyncTask или Обработчик?

Кто-то может сказать мне различие TRUE?

31
задан Ciro Santilli 新疆改造中心法轮功六四事件 3 February 2016 в 22:16
поделиться

2 ответа

Мое практическое правило: AsyncTask используется, когда я хочу сделать что-то, связанное с одним Activity , а Service - для тех случаев, когда я хочу сделать что-то, что будет продолжаться после того, как действие, которое было запущено, находится в фоновом режиме.

Поэтому, если я хочу выполнить небольшую фоновую обработку в Activity , не связывая пользовательский интерфейс, я буду использовать AsyncTask . Затем я буду использовать обработчик по умолчанию из этого Activity , чтобы передать сообщения обратно, чтобы гарантировать, что обновления происходят в основном потоке. Обработка обновлений в основном потоке имеет два преимущества: обновления пользовательского интерфейса происходят правильно, и вам не нужно так сильно беспокоиться о проблемах синхронизации.

Если, например, мне нужно выполнить загрузку, которая может занять некоторое время, я воспользуюсь службой . Поэтому, если я перейду к другому Activity в моем приложении или полностью другому приложению, моя Service сможет продолжать работать и загружать файл, чтобы он был готов, когда я вернусь в свое приложение. В этом случае я бы, вероятно, использовал Уведомление в строке состояния после завершения загрузки, чтобы пользователь мог вернуться к моему приложению в любое удобное для него время.

Что вы обнаружите, если используете AsyncTask для длительного процесса, он может продолжиться после того, как вы уйдете от Activity , но:

  • Если Действие находится в фоновом режиме, когда ваша обработка завершена, у вас могут возникнуть проблемы при попытке обновить пользовательский интерфейс с результатами и т. Д.
  • Фоновое действие гораздо более вероятно убивается Android, когда ему нужна память, а не Служба .
24
ответ дан 27 November 2019 в 22:27
поделиться

Используйте службу , когда вы у меня есть что-то, что должно работать в фоновом режиме в течение длительных периодов времени. Это не связано с какой-либо деятельностью. Канонический пример - музыкальный проигрыватель.
AsyncTask отлично подходит, когда некоторые вещи нужно делать в фоновом режиме во время текущего действия. Например. загрузка, поиск текста внутри файла и т. д.
Лично я использую Обработчики только для публикации изменений в потоке пользовательского интерфейса. Например. вы выполняете некоторые вычисления в фоновом потоке и публикуете результат через обработчик.

Итог: в большинстве случаев AsyncTask - это то, что вам нужно.

13
ответ дан 27 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: