Android 的消息机制

Android 的消息机制就是 Handler 的运行机制。

Handler 和 MessageQueue、Looper 的关系

  1. MessageQueue 中以单链表的形式存储的一组 Message,但它不能去处理,而 Looper 就是填补这个功能的。
  2. Looper 以无限循环的方式去查找是否有新消息,有就处理,否则一直等待。

Handler 的运行需要 MessageQueue 和 Looper 。
Handler 中包含 MessageQueue 和 Looper 的引用:

public class Handler {
    final MessageQueue mQueue;
    final Looper mLooper;
}

public final class Looper {
    final MessageQueue mQueue;
}
  1. 创建 Handler 需要当前 Thread 的 Looper,Looper 中会创建 MessageQueue;
  2. Thread 中包含 ThreadLocal.Values localValues,localValues中存储的 Looper;

Handler 的工作流程

Android 的消息机制_第1张图片
Handler 的工作流程.png
  1. Handler 调用 sendMessage 方法发送消息;
  2. sendMessage 方法的实现为向 MessageQueue 中插入一条消息,即调用 MessageQueue 的 enqueueMessage 方法;
  3. Looper 的 loop 方法会不停的调用 MessageQueue 中的 next 方法来获取 Message;
  4. Looper 获取到 Message 后,调用通过 Message 获取到的 Handler 对象(msg.target)的 dispatchMessage 方法来处理消息。
  5. Handler 的 dispatchMessage 方法是在创建 Handler 时所使用的 Looper 中执行的,这样就成功的将代码逻辑切换到指定的线程中去执行了。

你可能感兴趣的:(Android 的消息机制)