Handler学习笔记

 Handler对象一创建就跟创建它的线程(或者说线程的消息队列)绑定在一起了。Handler对象将Message对象和Runnable对象加入到线程的消息队列中,当它们从线程队列出来时就执行。
Handler主要有两个作用:(1)、排列将要执行的消息和线程。(2)、将不同线程要执行的动作自动加入到队列中。

         Handler使用 post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long)这几个方法来排列消息。post版本的方法是将线程加入到消息队列中。send版本的方法将Message对象加入到消息队列中,并handleMessage(Message)方法中执行。

如果设置了延迟时间,那么设置的延迟时间将是执行前等待的最短时间。(这一句我不知道是否理解正确了,如有人能对我的理解给出评论,将万分感谢。)

当第一个Handler创建的时候,会通过ThreadLocal创建一个Looper,与UI线程对应,并且这个Looper是唯一的,后面创建Handler对象的时候直接读取这个Looper,当Looper创建的时候会创建一个唯一的MessageQueue。其中Looper用来循环检查消息队列。到这里的时候,刚开始我就疑惑了:那post版本的方法又是什么原理呢?看了下源代码知道了,原来post版本的方法本质上也是sendMessage方式的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值