持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情
为了活动小家电,接着上篇搞!
Thread-Looper-Handler 结构是如何工作的?
-
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的关系
- 为每个线程创建一个
Looper
,Looper
存储在Thread
的 TLS 中,被检索和使用,Looper
和Thread
- 每个
Looper
都有一个MessageQueue
。换句话说,很好理解包含Looper
自己的循环目标的地方(MessageQueue)是指定的`Looper和MessageQueue** - MessageQueue,顾名思义,就是一个Queue数据结构。
Message
和Runnable
对象按照先进先出的方式进出。Message,Runnable, MessageQueue - 通信目标线程因 Handler 的创建位置和 Looper 的使用位置而异。 主线程、其他通用线程以及自身都可以成为通信对象