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去处理