#java #android
В офф документации очень коротко описано о том, что такое Looper. Можете объяснить что это и зачем его передавать в Handler Как в этом примере new Handler(mBackgroundThread.getLooper()); Или вот еще один пример, в чем разница выполнения этих Hendler new Handler().post(new Runnable() { @Override public void run() { //Execute some task } }); new Handler(getContext().getMainLooper()).post(new Runnable() { @Override public void run() { //Execute some task } }); При чем информации и примеров использования Looper как параметра очень мало и не понятно, толи из-за того, что это очень редко используется толи из-за того, что мало кто понимает как этим пользоваться... Реализация Handler в Thread class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }
Ответы
Ответ 1
Looper - это что-то вроде фонового потока, который работает постоянно, не завершаясь. Чтобы передать в этот фоновый поток выполнение какой-либо операции, используется Handler. Если создавать Handler, не передавая в него Looper, то Looper возьмется из того потока, в котором вызывается конструктор Handler(), при условии, что этот родительский поток является HandlerThread. Поток UI в Android является как раз таким потоком-лупером. Используя Handler, можно передавать в UI поток выполнение определенных операций вызовом метода post(Runnable). Естественно, не стоит надеяться, что тело метода run() выполнется в момент вызова метода post. В Вашем примере mBackgroundThread является наследником HandlerThread, следовательно имеет Looper. Разницы во втором Вашем блоке кода никакой нет, если оба конструктора Handler() вызываются из UI - потока.
Комментариев нет:
Отправить комментарий