В чем разница между обработчиком и runOnUiThread?
Я сталкиваюсь с обоими runOnUiThread
а также Handlers
Но мне все еще кажется сомнением, по каким фактам они точно отличаются.
Каков будет лучший способ обновить интерфейс? Должен ли я использовать runOnUiThread
или же Handler
?
Уже перебрал ссылку. Все еще не в состоянии оправдать разницу.
Заранее спасибо
3 ответа
runOnUiThread - это метод, который использует основной обработчик пользовательского интерфейса, поэтому в основном они одинаковы. Разница лишь в том, что если вы вызываете его внутри обработчика пользовательского интерфейса, вы просто запускаете его, а не публикуете.
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
Обработчик регистрирует себя, в котором он объявлен. или вы можете также установить петлитель вручную.
Обработчик особенно полезен, если вы хотите многократно публиковать данные в основной поток.
runOnUiThread - это метод Activity. поэтому, когда вам нужно обновить поток пользовательского интерфейса, вы должны написать код следующим образом.
runOnUiThread(new Runnable() {
@Override
public void run() {
// update the ui
}
});
Так что нет повторного использования.
например, вы хотите обновить статус загрузки файла. Вы должны написать вышеупомянутый метод несколько раз.
Но используя объекты-обработчики, обновляйте пользовательский интерфейс несколько раз, используя один и тот же объект-обработчик.
Обработчики - хороший способ реализовать очередь событий. Он не должен запускаться в главном потоке, вы можете установить свой собственный петлитель. RunOnUiThread - это, по сути, ярлык, поэтому у вас фактически нет обработчика initiate и так далее.