Реальная разница между 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 кода.