Handler工作原理

Android中,Handler的工作主要包含消息的发送和接收。Handler 作为日常开发的必备,不可避免就要涉及这方面的知识。从开发者角度来说,Handler 是 Android 消息机制的上层接口,使得开发的时只需与 Handler 交互即可。Handler 使用也很简单,能够轻松将一个任务切换到 Handler 所在的线程中执行。

发送消息主要通过post和send的一系列方法实现,发送消息的过程只是向MessageQueue中插入一条消息,它的next方法就会把这条消息返回给Looper,Looper收到消息后就开始处理了。最终消息由Looper交由Handler处理。由于Looper里面使用了ThreadLocal,所以它就能够将消息切换到指定的线程中执行。

Looper将消息交由Handler处理,就会调用Handler的disaptchMessage方法。这时候就进入了处理消息的阶段。

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

首先,检查Message的callback是否为null,不为null就通过handleCallback处理消息。这个callback是一个Runnable对象,也就是我们在post方法里传递的Runnable参数。

其次检查mCallBack是否为null,不为空就调用handleMessage方法。CallBack是一种当我们不想通过派生子类创建Handler的另外一种实现方式。

最后调用Handler的handlerMessage来处理消息

相关类

  • Message:消息,其中包含了消息ID,处理对象和处理数据,由MessageQueue统一队列管理,最终由Handler处理。
  • Handler:负责Message发送和处理。
  • MessageQueue:消息队列,按照FIFO原则存放消息。
  • Looper:消息泵,来处理MessageQueue中的Message。

这几个类之间的关系可总结如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值