Handler

作者: SevChen | 来源:发表于2016-12-20 23:59 被阅读23次

    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

        本文链接:https://www.haomeiwen.com/subject/nhwfvttx.html