Вопрос:

В чем разница между view.post () и view.getHandler (). Post () на Android?

android android-view android-handler

573 просмотра

1 ответ

4699 Репутация автора

Документация о view.post()говорит:

Заставляет Runnable быть добавленным в очередь сообщений. Runnable будет запущен в потоке пользовательского интерфейса.

view.getHandler() возвращает следующее:

Обработчик, связанный с потоком, выполняющим представление.

Я понимаю, что представления могут быть созданы в фоновом потоке, но они всегда будут выполняться в потоке пользовательского интерфейса. Это подразумевает, что view.getHandler () всегда должен возвращать обработчик, связанный с потоком пользовательского интерфейса - по сути, делая view.getHandler (). Post () и view.post () отправлять в один и тот же MessageQueue.

Почему я должен когда-либо использовать view.getHandler (). Post ()?

Автор: Jaguar Источник Размещён: 25.04.2017 04:28

Ответы (1)


3 плюса

90904 Репутация автора

Решение

Там нет большой разницы, кроме как getHandler().post()может привести вас к, NullPointerExceptionпоскольку он может вернуть ноль.

/**
 * @return A handler associated with the thread running the View. This
 * handler can be used to pump events in the UI events queue.
 */
public Handler getHandler() {
    final AttachInfo attachInfo = mAttachInfo;
    if (attachInfo != null) {
        return attachInfo.mHandler;
    }
    return null;
}

Между тем, это просто перенаправляет при тех же условиях, но возвращает логическое значение.

/**
 * <p>Causes the Runnable to be added to the message queue.
 * The runnable will be run on the user interface thread.</p>
 *
 * @param action The Runnable that will be executed.
 *
 * @return Returns true if the Runnable was successfully placed in to the
 *         message queue.  Returns false on failure, usually because the
 *         looper processing the message queue is exiting.
 *
 * @see #postDelayed
 * @see #removeCallbacks
 */
public boolean post(Runnable action) {
    final AttachInfo attachInfo = mAttachInfo;
    if (attachInfo != null) {
        return attachInfo.mHandler.post(action);
    }

    // Postpone the runnable until we know on which thread it needs to run.
    // Assume that the runnable will be successfully placed after attach.
    getRunQueue().post(action);
    return true;
}
Автор: cricket_007 Размещён: 25.04.2017 04:35
Вопросы из категории :
32x32