Android: Когда следует использовать Handler () и когда следует использовать Thread?

Когда мне нужно что-то запускать asynchronously , например, long running task или логика, использующая сеть, или по какой-то причине, запуск new Thread и его запуск отлично работают. Создание handler и его запуск также работают. Какая разница? Когда следует использовать каждый из них? Каковы преимущества / причины использования Handler а не Thread ?

PS. – Для этого вопроса, давайте проигнорируем AsyncTask . – Handler().postDelayed use case ясен для меня, для этого вопроса, давайте предположим, что мне нужно, чтобы задача началась немедленно.

Если все, что вы делаете, «тяжело», вы должны делать это в Thread. Если вы явно не запускаете его в своем потоке, он будет запускаться в основном потоке (UI), который может быть заметен как неудобный или медленный для ответа интерфейс ваших пользователей.

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

Типичное взаимодействие Thread / Handler может выглядеть примерно так:

 Handler h = new Handler(){ @Override public void handleMessage(Message msg){ if(msg.what == 0){ updateUI(); }else{ showErrorDialog(); } } }; Thread t = new Thread() { @Override public void run(){ doSomeWork(); if(succeed){ //we can't update the UI from here so we'll signal our handler and it will do it for us. h.sendEmptyMessage(0); }else{ h.sendEmptyMessage(1); } } }; 

В общем, примите домой, что вы должны использовать Thread каждый раз, когда выполняете какую-то работу, которая может быть длительной или очень интенсивной (т.е. любая сеть, файл IO, тяжелая арифметика и т. Д.).

Обработчик и Thread – это действительно две разные вещи.

Чтобы выполнить длительные рабочие задания, необходимо создать поток.

Обработчик – очень удобный объект для связи между двумя потоками (например: фоновый поток должен обновлять пользовательский интерфейс. Вы можете использовать обработчик для переноса некоторого Runnable из вашего фонового потока в поток пользовательского интерфейса).

Таким образом, у вас нет выбора между Handler или Thread. Используйте поток, чтобы выполнять тяжелые задания! (Вы можете использовать обработчик, если ваш фоновый поток вызовет некоторое задание в другом потоке – большую часть времени поток пользовательского интерфейса)

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

Для получения дополнительной информации вы можете ознакомиться с этой статьей .

Введите описание изображения здесь

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:

Тема: Выполнение задач в потоке saperate (Background), чем поток пользовательского интерфейса. (Помогает разблокировать поток пользовательского интерфейса)

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

Я нашел хороший пример на приведенной ниже ссылке http://infobloggall.com/2015/03/02/handlers-in-android/

Обработчик работает в одной теме, поток работает в другом потоке.

Используйте обработчик, если вам нужно запустить что-то в том же потоке, обычно элемент GUI или что-то в этом роде.

Используйте Thread, если вы хотите, чтобы основной поток был свободным, чтобы делать другие вещи. Используйте это для всего, что занимает значительное количество времени.

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

Для этого вы можете использовать класс android.os.Handler или класс AsyncTasks.

Класс Handler может обновлять пользовательский интерфейс. Обработчик предоставляет методы для приема экземпляров класса Message или Runnable.

Вы можете отправлять сообщения через метод sendMessage (Message msg) или через метод sendEmptyMessage ().

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

Handler может использоваться совместно с Thread для создания механизма Queued. Uou может использовать handler для публикации чего-то на Thread Looper