Android上的view.post()和view.getHandler()。post()有什么区别?

时间:2017-04-25 16:28:21

标签: android android-view android-handler

有关view.post()的文档说:

  

使Runnable添加到消息队列中。可运行的   将在用户界面线程上运行。

view.getHandler()返回以下内容:

  

与线程运行视图相关联的处理程序。

我理解可以在后台线程中创建视图,但它们将始终在UI线程上运行。这意味着view.getHandler()应始终返回与UI线程关联的处理程序 - 实质上使view.getHandler()。post()和view.post()发布到同一MessageQueue。

为什么我要使用view.getHandler()。post()?

1 个答案:

答案 0 :(得分:3)

getHandler().post()之外没有什么区别可以将你带到NullPointerException,因为它可以返回null。

/**
 * @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;
}