handler机制重点解析

这几天和大佬吹牛逼被虐了又回来看了handler   

首先看handler机制包括以下3重点   Handler  Looper  Message  MessageQueue

1.handler.java

这个东西的用处包括两方面

dispatchMessage  分发message
handleMessage    处理message
sendMessageAtTime  重要方法  所有sendMessage的方法到最后都是调用他

2.Looper.java

这个东西就是用来循环处理消息的  

最终要的  部分

static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();

这个就是个map  key是threadId    value是每个线程自己的 Looper  再加上调是个static final类型  就是唯一的意思

还有就是把mainLooper这个东西额外的拿出来维护了(主线程的Looper)

2.1创建:

Looper的使用一般都是先looper.prepare();

然后先去sThreadLocal 这个里面找是否当前线程有looper实例了  有了就报错

没有就创建  然后会同步创建MessageQueue   再添加到sThreadLocal  创建结束

第一次创建当然在MainThread中啦

2.2 使用

Looper的使用Looper.loop()

这个方法就是用来循环处理消息

里面有个MessageQueue 从里面拿消息拿到消息之后效用message的Handler来处理这个message就是handlerMessage方法

2.3结束

Looper.quit()

用来结束的  实际上就是传递给MessageQUeue

3.Message

 

包含两个链表一个next  用来表示消息队列  一个sPool表示回收的队列

 

4.MessageQueue

这个东西的用处就是用来排序消息的  回顾Handler是不是有方法

sendMessageAtTime   这个东西有一个时间参数就是在这个使用的
4.1 enqueueMessage()
把message塞给handler最终会塞给这个方法  用来排序message  按时间排序  接近当前时间就排第一个

4.2 Message next() 

这个方法用来取message  每次调用这个方法会取第一个message  判断时间是否到了  没到就阻塞相应时间

4.3 quit()

回收所有的message

看完之后我一脸懵逼    为什么这个MessageQueue阻塞了  不会anr呢   然后就得去看native中的方法了epoll

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值