为了活动小家电-Android Thread和Handler(二)

66 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

为了活动小家电,接着上篇搞!

Thread-Looper-Handler 结构是如何工作的?

image.png

  • Android中使用的线程间通信方式(Thread-Looper-Handler结构)可以用上图概括。

  • 上图显示了发送线程 a接收线程 b之间的通信。

    • 首先,它从发送线程 (Thread a) 向接收线程 (Thread b)发送一条消息发布一个可运行文件。
    • 接收线程(Thread b)的 Handler 处理接收。接收处理是指接收线程(Thread b)的handler接收到发送线程(Thread a)的消息和runnable,并依次插入MessageQueue。
    • 在 MesseageQueue中,消息和可运行对象以 FIFO 方法推送和弹出。
    • 接收线程(Thread b)的Handler依次处理弹出消息和runnable的任务。
    • 重复上述过程,直到Looper从 MessageQueue 中弹出 Null 为止。****
  • 也就是说,当发送线程向接收线程发送作业时,接收线程的处理程序依次接收处理作业,从而处理多个线程之间的通信和工作。很容易理解,Handler就是调度多个线程之间的通信,处理工作的地方。

Thread与Handler、Looper、MessageQueue、Message、Runnable的关系

image.png

  • 为每个线程创建一个 LooperLooper 存储在 Thread 的 TLS 中,被检索和使用,LooperThread
  • 每个 Looper 都有一个 MessageQueue。换句话说,很好理解包含Looper自己的循环目标的地方(MessageQueue)是指定的`Looper和MessageQueue**
  • MessageQueue,顾名思义,就是一个Queue数据结构。MessageRunnable 对象按照先进先出的方式进出。Message,Runnable, MessageQueue
  • 通信目标线程因 Handler 的创建位置和 Looper 的使用位置而异。 主线程、其他通用线程以及自身都可以成为通信对象

为了活动小家电,下篇继续搞!