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);
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容