【安卓Handler】Handler消息机制

【安卓通信机制】Handler

由于以后以后要从事安卓系统方面的工作,然而本人半个月前还是Android小白. 这几天学习了gityuan的Android操作系统架构, 按照自己喜欢的方式总结一下. 有兴趣的同学可以直接看原博客地址:http://gityuan.com/2016/01/01/handler-message-usage/.

Android消息机制的四个类都是在framework/base/core/java/andorid/os/包下.

framework/base/core/java/andorid/os/
  - Handler.java
  - Looper.java
  - Message.java
  - MessageQueue.java

1.事先准备

我准备以gityuan博客上的例子, 以一条线的形式, 把消息传递的工作给描述出来.
首先, 先了解一下这四个类之间的关系.

1.1 Looper类中有以下重要成员变量和方法申明

(这里想说明一点的是, gityuan的博客中介绍Looper时候有个post()方法, 但是该post()方法的实现和Handler中post()方法是一样的, 并且我自己看源码之后发现Looper类中并没有post()方法)

//这个Looper的引用,用myLooper()方法后指向存储在当前线程本地栈中的Looper
private static Looper sMainLooper;
//ThreadLocal类型的变量, 内部只有一个存储在当前本地栈中的Looper副本
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
//每一个Looper还拥有一个MessqgeQueue实例的引用
final MessageQueue mQueue;
//Looper类中保存当前线程的Thread, 在构造器中通过Thread.currentThread获得.
final Thread mThread;
//重要程度递减
public static void prepare();
public static void loop();
public static @Nullable Looper myLooper();

public void quit();

1.2 Handler类中的主要成员变量和方法申明

//Handler在构造器中, 通过myLooper()方法获得Looper, 然后通过Looper.mQueue获得MessageQueue实例的引用
final Looper mLooper;
final MessageQueue mQueue;
//用于消息分发
public void dispatchMessage(Message msg);
//这类方法有很多,他们互相调用,主要是用来队列排列用的.维护Message在队列中的顺序, 最终都是调用Handler类的MessageQueue.enqueueMessage()方法来入队
public final boolean sendMessage(@NonNull Message msg);
//传一个Runable接口类型的实例进去,最后还是调用Handler类的MessageQueue.enqueueMessage()方法来入队, 待会解释
public final boolean post(@NonNull Runnable r);
//Handler类自己的入队方法, 内部调用MessageQueue.enqueueMessage()方法真正入队
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis)

1.3MessageQueue类

MessageQueue类是一个消息队列, 它的作用就是用来维护消息传递 入队,出队.
它是消息机制的Java层和C++层的连接纽带,大部分核心方法都交给native层来处理. 暂时只要知道它几个方法的作用就行, 不影响本文阅读, 具体想要了解的可以在之后的博客结合native层进行分析.

//构造器
MessageQueue(boolean quitAllowed);
//提取下一条message
Message next()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值