Зачем создавать HandlerThread для одной цели: передать его Looper новому Handler
Я вижу много примеров в коде, где мы видим следующее:
HandlerThread thread = new HandlerThread("Thread1");
thread.start();
mLoadHandler = new Handler(thread.getLooper())
mLoadHandler.post(new Runnable() {
public void run() {
// run some code
//methodA();
}
});
Вы можете найти это также в:
Почему они создают HandlerThread
только для одной цели: передать это Looper
к новому Handler
, Почему бы просто не продлить HandlerThread
и сделать весь код (methodA()
) там? ИЛИ создайте экземпляр обработчика и позвоните туда:
Looper.prepare();
Looper.loop();
2 ответа
Имея только код, который вы показываете, нет большой разницы в том, чтобы иметь дело с HandlerThread в любом случае.
Однако, если существует множество разных компонентов, пытающихся разместить разные Runnables в одном и том же потоке, вы бы не совмещали всю их логику в одном классе. В этом случае проще передать обработчик для этих различных компонентов для совместного использования. Это один сценарий, но могут быть и другие.
Если вы хотите получить обработчик, связанный с созданным вами классом ThreadHandler, вы должны передать Looper, связанный с этим ThreadHadler, в противном случае обработчик будет связан с текущим потоком, в котором он был создан. Целью создания такого HandlerThread обычно является то, что когда вы хотите выполнить одно и то же задание несколько раз, вы можете просто использовать этот объект Handler для отправки сообщения в новую ветку.
Я думаю, что ваш вопрос заключается в том, почему вы хотите создать внутренний класс, а не реализовать отдельный независимый класс. Если вы создаете внутренний класс, вы можете получить доступ непосредственно к членам содержащего класса. Если вы реализуете отдельный класс, вам нужно будет передать необходимые переменные / значения представления в новый класс.