梳理与理解Android中的Handler机制

Handler对于安卓开发者来说并不陌生,相信不少同学都在网上看到过各种各样的有关于Handler机制的文章,所以这里也不再赘述,主要是梳理一下几个类的关系、消息处理流程以及理解线程切换的原理。

类的关系

我们都知道,Handler中需要关注的无非就是这四个类,Handler、Message、MessageQueue、Looper。

从成员变量上看它们的关系如下所示,

Handler:持有 Looper、MessageQueue
Looper:持有 MessageQueue
Message:持有 Handler

消息处理流程

整个消息发送处理的流程如下,
1.调用 Looper.prepare() 初始化所在线程的 Looper ,并调用 Looper.loop() 方法开启循环
2.调用 new Handler(Looper.myLooper()) 初始化 Handler
3. Handler通过将消息塞给MessageQueue
4. Looper 从 MessageQueue 中读取消息
5. Looper 处理消息,调用 msg.target.dispatchMessage(msg) 把消息转回给 Handler 去处理
6. Handler 处理消息

理解线程切换

从职责上看它们的关系如下所示,

Handler:发送消息
MessageQueue:存储消息
Looper:读取消息

这个模型是不是很常见,特别是在跨进程/线程通信里面,当不同进程/线程需要进行通信时,它们总是需要一个公共的双方都能获取到的空间,去做信息的交换,比如共享内存。

在 Handler 机制中,MessageQueue 其实就是扮演了公共空间的角色,它存储来自于任意线程的 Handler 发送过来的消息,而 Loopr 则永远在它所在的线程里面去读取到这个消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值