Handler 机制浅析及Message的异步加载

来源:互联网 发布:新浪 算法工程师 编辑:程序博客网 时间:2024/05/16 12:41
 最近上班没事做,就阅读了android的部分源码,打发时间也算自我学习提高自己。原本对android Handler机制较为熟悉,今天阅读源码验证了自己一些想法并将成果记录下来,以便日后复习,或也可助他人了解其中知识!
    android 为何要使用Handler机制?android引入Handler机制的原因是:避免主线程(UI线程)在异步加载时可能导致的阻塞和紊乱,提供有序化的消息加载机制!
以下整理了一张图:
handler.jpg 

android中的handler机制使用了链表的数据结构和大量的设计模式,实现了所谓的高内聚低耦合(以上纯属夸它几句设计得好),其中大量的使用回调模式形成android的一种特色,由此也感觉到代码之美是我等匹夫无法达到的水平(惭愧惭愧)。
简单的来说:如果需要在主线程中做一些操作,那么就要把你要做的操作放在消息里,然后将消息放在沙漏里,然后让它按照先来后到的顺序依次操作。
复杂的来说:
    自己要做的工作:1.实现Handler类或者实现Handler 的内部接口Callback并重写其handleMassage方法将需要实现的操作放在其中;
                                2.用handler提供的接口(sendMessage()等一系列方法)发送消息(此Message对象对应到handleMassage中的形参                                            Message对象)
                                3.传递数据可以使用message的serData()传递Bundle对象

    android系统做的:1.将发送的消息通过Handler 操作 MessageQueue追加至 Message链表中去;(简单的说就是MessageQueue中有个成                                        员是Message链表,Handler从Looper中获取MessageQueue对象来操作Message链表,将消息追加至MessageQueue                                        中去);
                                  2.在Looper的loop方法中循环将Message取出来,回调目标Handler对象的dispatchMessage()方法,在                                                                dispatchMessage方法中调用handlerMessage方法或者实现的Handler内部接口Callback的handlerMessage方法;
  总结:可以把Handler机制和消息的异步加载理解成它转了一个圈,而转这个圈的目的就是:避免主线程(UI线程)在异步加载时可能导致的阻塞和紊乱,提供有序化的消息加载机制!也许你看不懂,这可能是我的表述能力有问题,如果你看不懂可以结合上图一步一步查看对应API,便可清晰了然于胸!
    版权所有,转载请注明出处! 最终解释权归小彭所有