Обработчик против AsyncTask против потока - PullRequest
375 голосов
/ 06 августа 2011

Я немного запутался по поводу различий между Handlers, AsyncTask и Threads в Android.Я прочитал довольно много блогов и вопросов здесь в stackoverflow.

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

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

Thread, однако не можете взаимодействовать с пользовательским интерфейсом, обеспечить более «базовую» многопоточность, и вы пропустите все абстракции AsyncTask.

ОднакоЯ хотел бы, чтобы в сокете работало соединение с сокетом.Должно ли это выполняться в обработчике или потоке, или даже в AsyncTask?Взаимодействие с интерфейсом вообще не нужно.Имеет ли это значение с точки зрения производительности, которую я использую?

Между тем документация была значительно улучшена.

Ответы [ 12 ]

0 голосов
/ 28 марта 2018

Thread

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

В Android все компоненты выполняются в одном, называемом главном потоке.Задачи очереди Android и выполняйте их одну за другой в главном потоке.Когда долго выполняющиеся задачи выполняются, приложение перестает отвечать на запросы.

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

Обработчик

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

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

AsyncTask

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

См. поток Android, обработчик, asynctask и пулы потоков дляпримеры.

0 голосов
/ 09 февраля 2017

Handler - средство связи между потоками. В Android он в основном используется для связи с основным потоком, создавая и отправляя сообщения через обработчик

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...