美文网首页
Android 的消息机制

Android 的消息机制

作者: plusend | 来源:发表于2016-07-04 01:05 被阅读14次

    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 的工作流程

    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 的消息机制

          本文链接:https://www.haomeiwen.com/subject/xlycjttx.html