В чем разница между обработчиком и 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 и так далее.

Другие вопросы по тегам