Handler

Handler是主要的任务是,往Looper里面的消息队列插入消息,当消息被执行时,Handler对应的CallBack就会被执行。
Handler有5个主要数据成员,和2个核心函数

mLooper

该Handler所对应的线程的Looper,该Looper是该Handler独有的。

mQueue

上面的Looper所拥有的消息队列

mCallback

如果mCallback被设置,那么mCallback.handleMessage(Message message)会被执行;如果mCallback为null,那么Handler的handleMessage(Message message)会被执行。

mAsynchronous

如果mAsynchronous为true,那么Handler插入的消息就是异步的。

mMessenger

Handler内部实现的一个信鸽(Bindler),适用于跨进程通讯。

enqueueMessage

将消息插入到消息队列中去,设置target和是否异步。

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
        msg.target = this;
        if (mAsynchronous) {
            msg.setAsynchronous(true);
        }
        return queue.enqueueMessage(msg, uptimeMillis);
    }

dispatchMessage

如果消息有Runnable,那么先执行Runnable的run(),如果Handler的CallBack不为空,且mCallback.handleMessage(msg)消耗了消息(返回true)那么Handler自身的handleMessage(msg)就不会执行,否则,接着执行handleMessage(msg)。

public void dispatchMessage(Message msg) {
        if (msg.callback != null) {
            handleCallback(msg);
        } else {
            if (mCallback != null) {
                if (mCallback.handleMessage(msg)) {
                    return;
                }
            }
            handleMessage(msg);
        }
    }

你可能感兴趣的:(Handler)