关于handler机制(结合源码及方法的调用去总结)

1.什么是handler

Handler是android在设计时,封装好的一套用于更新ui的机制,用于创建  传递 处理 消息,如果不遵循这套规范 就不能更新Ui, activity的Ui更新也是通过handler机制来维护的

 

2.handler,looper,messagequeue三者的关系

 

(1).从谷歌官方文档中,得知,每当我们去创建一个handler,就会和当前的ActivityThread进行绑定.

 

(2)在ActivityThread中的main方法中,执行了looper的prepareMainLooper(),

 

(3).prepareMainLooper()内部调用了prepare()方法,在prepare()中,通过threadlocal的set方法,

mThreadlocal.set(new Looper())

去创建一个Looper对象, 并把当前的thread作为key,looper作为value保存起来,这样就能保证一个线程只有一个looper,在get的时候,能通过当前的thread,取到的当前的looper

 

(4)在创建Looper对象时,在Looper的构造方法 ,去创建messagequeue,(这样Lopper内部维护就messagequeue消息队列)

 

(5)通过查看handler的构造方法可以知道,handler在构造方法中,调用了looper对象的mylooper方法,mylooper方法内部调用了threadlocal的get方法,获取当前的looper对象,这样handler和looper和messagequeue三者就关联起来了.

问题来了,threadlocal是用来干嘛的

(6)ThreadLocal的作用是用来保存当前线程的对象信息,

在ThreadLocal中,有两个很重要的方法,set和get方法.Set方法用于设置当前对象的值,get方法用于获取当前对象的值,

 

3.Handler如何发送消息?

在handler发送消息的时候,最终会调用sendMessageAtTime方法,在这个方法中,去获取messagequeue,通过messagequeue的enqueueMessage()去将消息放入消息队列中,

 

4.消息是如何轮循的?

在Looper的loop方法中,去取出messagequeue,然后调用messagequeue的next方法,消息为空的时候return,不为空取出消息,调用Handler的dispatchMessage(),在dispatchMessage中,.判断handler的callback是否为空,不为空,调用callback,为空调用handlemessage去处理消息这样就完成了发送消息,处理消息的事件回调

 

5.总结:

总的来说,handler负责发送消息,Looper负责接收handler发送的消息,把消息放进messagequeue中,并通过next方法进行消息的轮循,把消息再交给handler去处理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值