Реальная разница между AsyncTask и Thread

Я читал документацию на Android (AsyncTask, Thread) и vogella tutorial об этом, но у меня есть сомнения еще.

Например, я хочу отправить сообщение с Android-приложения на сервер. И я хотел бы обработать его ответ. Что я должен использовать?

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

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

Ответ 1

Прочтите этот блог

http://crazyaboutandroid.blogspot.in/2011/12/difference-between-android.html

и Подробности:

Разница между сервисами Android, Thread, IntentService и AsyncTask

Когда использовать?

Сервис

   Task with no UI, but shouldn't be too long. Use threads within service for long tasks.

Тема

- Long task in general.

- For tasks in parallel use Multiple threads (traditional mechanisms)

AsyncTask

- Small task having to communicate with main thread.

- For tasks in parallel use multiple instances OR Executor 

Ответ 2

Все остальные ответы здесь не полны, между AsyncTask и Thread существует большая разница, т.е.

Thread может запускаться из любого потока, основного/пользовательского интерфейса или фона; но AsyncTask должен запускаться из основного потока.

Также на более низком api андроида (не уверен, может быть уровень api < 11) один экземпляр AsyncTask может быть выполнен только один раз.

Подробнее читайте Разница между службами Android, Thread, IntentService и AsyncTask

В общем

Тема

  • Длительная задача в целом.

  • Для параллельных задач. Несколько потоков (традиционные механизмы).

AsyncTask

  • Маленькая задача, связанная с основным потоком.

  • Для параллельных задач используйте несколько экземпляров OR Executor

Ответ 3

в общем случае использование этих двух функций эквивалентно, но AsyncTask более прост в плане интеграции с GUI

Ответ 4

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

Вы можете управлять своими функциями

doInBackground (Params... params), onCancelled(), onPostExecute (результат результата), onPreExecute(), nProgressUpdate (Прогресс... значения), publishProgress (Прогресс... значения)

Ответ 5

  • Я бы предпочел использовать задачу Async, так как это даст вам знать, когда background process получает начальный и более и когда я могу parse ответ.
  • Async имеет методы типа onPreExecute и onPostExecute, которые позволят нам выполнять задачи до и после вызова фона задачи.

Ответ 6

AsyncTask enables proper and easy use of the UI thread. - от Developer.

Дело в том, что AsyncTask - это особый вид Thread - тот, который является потоком GUI, он работает в фоновом режиме и также позволяет вам что-то делать с GUI - он в основном "запрограммирован" для вас с функциями onPreExecute(), do inBackground(), onPostExecute().

Чтобы сделать Thread работать таким образом, вам нужно написать loooot кода.