Нить
Поток - это параллельная единица выполнения. У него есть свой стек вызовов. Существует два способа реализации потоков в приложениях.
Один предоставляет новый класс, который расширяет Thread и переопределяет его метод run (). Другой предоставляет новый экземпляр Thread с объектом Runnable во время его создания. Поток можно выполнить, вызвав его метод «start». Вы можете установить «Приоритет» потока, вызвав его метод setPriority (int).
Поток может быть использован, если вы не имеете никакого влияния в части пользовательского интерфейса. Например, вы вызываете какой-либо веб-сервис или загружаете некоторые данные, и после загрузки вы отображаете их на экране. Затем вам нужно использовать обработчик с потоком, и это усложнит ваше приложение для обработки всех ответов от потоков.
Обработчик позволяет отправлять и обрабатывать объекты Message и Runnable, связанные с MessageQueue потока. Каждый поток имеет каждую очередь сообщений. (Как список дел), и поток будет принимать каждое сообщение и обрабатывать его, пока очередь сообщений не станет пустой. Поэтому, когда обработчик связывается, он просто отправляет сообщение потоку вызывающей стороны и ожидает обработки.
Если вы используете потоки Java, вам необходимо выполнить следующие требования в своем собственном коде:
Синхронизация с основным потоком, если вы отправляете результаты обратно в пользовательский интерфейс. Нет возможности отмены потока по умолчанию Нет пула потоков по умолчанию Нет значения по умолчанию для обработки изменений конфигурации в Android
AsyncTask
AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и / или обработчиками. Асинхронная задача определяется вычислением, которое выполняется в фоновом потоке и результаты которого публикуются в потоке пользовательского интерфейса.
AsyncTask пройдёт следующие 4 этапа:
onPreExecute ()
Вызывается в потоке пользовательского интерфейса перед выполнением задачи
doInbackground (Params ..)
Вызывается в фоновом потоке сразу после завершения выполнения onPreExecute ().
onProgressUpdate (Прогресс ..)
Вызывается в потоке пользовательского интерфейса после вызова publishProgress (Progress ...).
onPostExecute (Результат)
Вызывается в потоке пользовательского интерфейса после завершения фоновых вычислений.
Почему вы должны использовать AsyncTask?
Простота в использовании для потока пользовательского интерфейса. (Таким образом, используйте его, когда поток вызывающего является потоком пользовательского интерфейса).
Нет необходимости манипулировать обработчиками.