美文网首页
10-2 Android 的消息机制分析

10-2 Android 的消息机制分析

作者: Yue_Q | 来源:发表于2019-01-08 19:27 被阅读0次

      Handle 是 Android 消息机制的上层接口,多用于更新 UI ,也可以做其他耗时操作比如网络。
      Handler 创建的时候会采用当前的线程 Looper 来构造消息循环系统。说道 Looper 要说道 ThreadLocal

    • 主要作用Handler 是将一个任务切换到某个指定的线程中去执行。
    • ThreadLocal: 并不是线程,作用是可以在每个线程中存储数据。可以在不同的线程中互不干扰地提供数据。通过 ThreadLoacl 可以获得每个线程的 Looper
    • MessageQueue:作用是在每个线程存储消息的单元

    Handler 工作流程

      Handler 创建完毕后,这个时候内部的 Looper 以及 MessageQueue 就可以和 Handler 一起协同工作了。

    • Handler 通过 post/send 方法将一个 Runnable 投递到 Handler 内部的 Looper 处理。其实 post 方法最终也是通过 send 方法完成的。
    • send 过程:它会调用 MessageQueueenqueueMessage 方法将这个消息放入消息队列中,然后 Looper 发现有新消息到来时,就会处理这个消息,最终消息中 Runnable 或者 HandlerhandleMessage方法被调用。Looper 是运行创建Handler所在的线程中

    ThreadLocal 的工作原理

       ThreadLocal 是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据, 其他线程无法访问。

    • Handler 它需要获取当前线程的LooperLooper的作用域就是线程并且不同线程具有不同的 Looper,通过 ThreadLocal可以获取本线程的Looper

    Looper 的工作原理

       Looper 具体实现,Looper 在Android 中扮演着消息循环的角色,具体它会不停地从 MessageQueue 中查看是否有新消息,如果有新消息就会立刻处理,否则会阻塞。

    • Looper 会在构造方法中创建一个MessageQueue
    • Looper 提供了 quitquitSafely 来退出一个 Looper,在子线程中建议在不需要的时候停止 Looper。

    Hanlder 的工作原理

       Handler 的工作主要包含消息的发送和接收过程。消息的发送可以通过 post 的一系列方法以及 send 一系列方法实现,post的一系列方法最终是通过 send 的一些列方法来实现的。

    • 发送消息Handler 发送消息的过程仅仅是向消息队列插入一条消息,MessageQueue 的 next 方法就会返回这条消息给 Looper,Looper 收到消息后就开始处理了,最终消息由 Looper 交由 Handler 处理,即 HandlerdispatchMessage 方法被调用,Handler进入消息处理阶段
    • 处理消息
      (1) post 方法传递的 Runnable 对象处理
      (2)mCallback 对象处理,Callback 是个接口,通过 Handler handler = new Handler(callback); 创建的 Handler 对象(日常开发,创建 Handler 对象的方式是派生一个 Handler 子类并重写其 Handler 方式),不想用子类可以使用 Callback 来实现。
    • 最后调用, HandlerhandlerMessage 方式来处理消息。

    相关文章

      网友评论

          本文标题:10-2 Android 的消息机制分析

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