Разница между обслуживанием, асинхронной задачей и потоком? - PullRequest
144 голосов
/ 16 июля 2010

В чем разница между Service, Async Task & Thread. Если я не ошибаюсь, все они используются, чтобы делать некоторые вещи в фоновом режиме. Итак, как решить, что и когда использовать?

Ответы [ 6 ]

181 голосов
/ 16 июля 2010

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

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

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

  • AsyncTask - это интеллектуальная нить, которую рекомендуется использовать.Интеллектуальный, поскольку он может помочь с его методами, и есть три метода, которые выполняются в потоке пользовательского интерфейса, что хорошо для обновления компонентов пользовательского интерфейса.

Я часто использую Services, AsyncTasks.Меньше потоков или совсем нет, так как с AsyncTask я могу делать практически все.

22 голосов
/ 02 ноября 2015

Это самый простой ответ на ваш вопрос

Тема

- это единица выполнения, которая работает "параллельно" с Основным потоком - важный момент, выне может обновить компонент пользовательского интерфейса из любого потока, кроме основного потока.

AsyncTask

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

Служба

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

15 голосов
/ 01 октября 2013

Немного больше информации, которую я хотел бы, чтобы кто-то сказал мне несколько дней назад:

  • Вы можете обмениваться глобальными переменными, такими как потоки, между Операциями и Сервисами.* application вместе со всеми его глобальными переменными не будет уничтожено, пока есть активность или служба, все еще присутствующая.
  • Если у вас есть экземпляр службы в вашем приложении и потребности ОСресурсов, он сначала убивает ваши действия, но пока есть служба, ОС не будет уничтожать ваше приложение вместе с его глобальными переменными.

Мой пример использования такой:один поток в глобальном пространстве, который подключен к серверу, и действие, которое показывает результаты.Когда пользователь нажимает кнопку «Домой», действие переходит в фоновый режим и запускается новая служба.Затем эта служба читает результаты из потока и при необходимости отображает информацию в области уведомлений.Я не беспокоюсь о том, что ОС разрушает мою активность, потому что я знаю, что, пока служба работает, она не уничтожит поток.

9 голосов
/ 02 февраля 2015

Короче говоря, Служба для time consuming tasks, AsyncTask для short-lived tasks, Тема является standard java construction для потоков.

3 голосов
/ 15 мая 2015

С точки зрения разработчика:

Поток : Используется для выполнения набора кодов параллельно основному потоку.Но вы не можете обрабатывать пользовательский интерфейс внутри потока.Для этого вам нужно использовать Handler.Hadler работает как поток, но также может обрабатывать пользовательский интерфейс.

ASyncTask : Используется для обработки тех задач, которые вы не можете выполнить для работы в основном потоке.Например, HTTP-запрос является очень тяжелой работой, которую нельзя обработать в главном потоке, поэтому вы обрабатываете HTTP-запрос в ASyncTask. Он работает параллельно с вашим основным потоком в асинхронном режиме в фоновом режиме. У него есть несколько методов обратного вызова, которые вызываютсяна соответствующие события.

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

2 голосов
/ 13 июля 2015

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

...