Handler的实现原理

处理过程: 
从handler中获取一个消息对象,把数据封装到消息对象中,通过handler的send…方法把消息push到MessageQueue队列中。 
Looper对象会轮询MessageQueue队列,把消息对象取出。 
通过dispatchMessage分发给Handler,再回调用Handler实现的handleMessage方法处理消息。

流程图: 
Handler的实现原理

Handler的实现中适及以下对象: 
1、Handler本身:负责消息的发送和处理 
2、Message:消息对象 
3、MessageQueue:消息队列(用于存放消息对象的数据结构) 
4、Looper:消息队列的处理者(用于轮询消息队列的消息对象,取出后回调handler的dispatchMessage进行消息的分发,dispatchMessage方法会回调handleMessage方法把消息传入,由Handler的实现类来处理)

Message对象的内部实现是链表,最大长度是50,用于缓存消息对象,达到重复利用消息对象的目的,以减少消息对象的创建,所以通常我们要使用obtainMessage方法来获取消息对象

安全:Handler的消息处理机制是线程安全

关系:创建Handler时会创建Looper,Looper对象的创建又创建了MessageQueue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值