Android: AsyncTask vs Service

Почему я читаю в ответе на большинство вопросов здесь много о AsyncTask и загрузчиках, но ничего о Services? Службы просто не известны очень хорошо или они устарели или имеют некоторые плохие атрибуты или что-то еще? В чем отличия?

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

Ответ 1

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

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

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

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

Кроме того, как уже сказал Шериф, службы не обязательно сбегают от потока пользовательского интерфейса.

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

Ответ 2

Services полностью разные: Сервисы не являются потоками!

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


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

Просто мысль: служба может иметь объект AsyncTask!

Ответ 3

Служба - это демон, AsynkTask - фоновый поток

Ответ 4

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

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

Ответ 5

Сервис и asynctasks выполняют почти то же самое, почти. Использование службы или асинтеза зависит от вашего требования.

в качестве примера, если вы хотите загрузить данные в список с сервера после нажатия какой-либо кнопки или смены экрана, лучше перейти с помощью asynctask.it, параллельно с основным потоком ui (выполняется в фоновом режиме). Для запуска операции asynctack или ваше приложение должно на основном потоке пользовательского интерфейса. После выхода из приложения нет асинктас.

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

счастливое кодирование.