, если я не использую HandlerThread (передать его петлитель Handler), это означает в этом случае обработчик использовать MainThread (UI Thread) «s Looper?
Посмотрите документацию Handler
Handler()
конструктор по умолчанию связывает этот обработчик с Looper для текущего потока.
Если ваш текущий поток MainThread, он использует MainThread (UI Thread) Looper.
Чтобы явно связать обработчик с вашим MainThread (потоком пользовательского интерфейса), напишите ниже код.
Handler mHandler = new Handler(Looper.getMainLooper();
Если вы пишете, как показано ниже, он использует HandlerThread Looper.
HandlerThread handlerThread = new HandlerThread("HandlerThread");
handlerThread.start();
Handler requestHandler = new Handler(handlerThread.getLooper());
Если у вас есть какие-либо сетевые операции ввода-вывода в Runnable
задачи, вы не можете использовать основной поток петлитель. В этом случае HandlerThread
удобен для выполнения задания Runnable
, выполняющего операцию сетевого ввода-вывода.
Вы можете найти пример кода @How do I fix android.os.NetworkOnMainThreadException?
Какой результат будет получить, если обработчик использует Looper MainThread в? Может заблокировать mainThread?
Если вы отправляете много событий в MainThread Looper, они будут выполняться непосредственно на MainThread (UI Thread). Если заданные задачи занимают больше времени для выполнения, MainThread будет заблокирован.
Проверить ниже должности для внутренностей Looper:
What is the purpose of Looper and how to use it?
Это официальные документы. 'Удобный класс для запуска нового потока с петлером. Затем петлитель можно использовать для создания классов обработчиков. Обратите внимание, что start() еще нужно вызвать. 'Я сэкономил ваше время. – UnKnown