Handler机制源码分析

一.
Carson的handler机制的源码分析写的非常的清晰,强烈建议大家去学习,我今天写这篇文章只是做简单的补充。
Handler机制源码分析

1.Handler 类中,分发处理消息的方法dispatchMessage():

    
    /**
     * Handle system messages here.
     */
    public void dispatchMessage(Message msg) {
        if (msg.callback != null) {
            handleCallback(msg);  // 第一处理消息的地方
        } else {
            if (mCallback != null) {
                if (mCallback.handleMessage(msg)) {  // 第一处理消息的地方
                    return;
                }
            }
            handleMessage(msg);  // 第三处理消息的地方
        }
    }

在对消息的处理方法中有三处处理消息的地方,对应着三种处理消息的方法
首先是第一种 ,msg.callback != null 就去执行 handleCallback(msg) 这个就是我们熟知的 执行 Runnable的方法,而第三种就是 我们熟知的重写 Handler的handleMessage方法,来实现对消息的处理。而第二种呢? mCallback 是什么? 在Handler的代码中找到mCallback 是Callback 类型,而Callback 是一个接口,如下:

   public interface Callback {
        /**
         * @param msg A {@link android.os.Message Message} object
         * @return True if no further handling is desired
         */
        public boolean handleMessage(Message msg);
    }

那个mCallback 又是怎么来的,其中看看 Handler的构造函数就能发现端倪:这个mCallback 是创建Handler是传进来的。

     * @param callback The callback interface in which to handle messages, or null.
     */
    public Handler(Callback callback) {
        this(callback, false);
    }

真相大白了,dispatchMessage中对应的第二种处理消息的方式其实就是 通过创建Handler时,传进来的,实现了Callback 的参数实现的(这个参数可以为null)。
2.同步屏障:
同步屏障
3.handler阻塞机制
阻塞机制
4.保证一个线程只能有一个Looper,一个消息队列的机制 ThreadLocal
ThreadLocal

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值