android handler
handler 是运行在UI线程中的,它负责向MQ里添加任务,等队列轮到自己时,在自身的hander里处理更新信息!
2011091323582123.png一个很有意思的比喻:
打个比方:公司类比App
PM 的主要工作是设计产品,写需求文档,改需求,中途改需求,提测前改需求...
UI 主要工作是UI设计,交互等。
RD 工作我就不说了
CEO 不解释。
公司开创之后(App启动),那么CEO开始干活了(主线程【UI线程】启动),这时候CEO开启了无限循环工作狂模式,自己的公司没办法啊(相当于UI主线程转成Looper线程【源码里面有】)CEO招了一名RD(new Handler 实例)并把告诉PM和UI,如果你们有什么任务和需求就让RD(Handler实例)转告给我(CEO)。RD会把PM和UI的需求(Message)一条条记到CEO的备忘录里(MessageQueue)。CEO 无限循环的工作就是不断查看备忘录,看有什么任务要做,有任务就从备忘录一条一条拿出任务来,然后交给这一名RD(Handler 实例)去处理(毕竟CEO 不会写代码 囧...)。当然如果备忘录都做完了,这时候CEO就会去睡觉(线程堵塞【简单理解成线程wait】,让出CPU资源,让其他线程去执行)。但是这个备忘录有个特殊的功能就是没有任务的时候突然插入第一条任务(从无到有)就会有闹钟功能叫醒CEO起床继续处理备忘录。 整个消息处理机制的工作原理基本就是这样的。后面会有源码分析,你再来结合这个场景,会更好理解一些。
具体参考:
http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html
http://www.jianshu.com/p/02962454adf7
http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html