今天简单对andriod的消息机制做一个简单的概述,主要包括handler messagequeue,Looper。这是去面试的时候问的最多的基础的知识点,敲小黑板拉。。。。。
MessageQueue:内部实现并不是用的队列,实际上它是通过一个单链表的数据结构来维护消息列表。只要包括两个操作:插入和读取,对应的方法分别是enqueueMessage和next ,其中enqueueMessage的作用是往消息队列中插入一条消息,next的作用是从消息队列中取出一条消息并将其从消息队列中移除
Looper :在消息机制中扮演者消息循环的角色,具体来说它会不停的从MessageQueue中查看是否有新的消息,如果有新的消息立马就处理,否则就一直堵塞在那里 有一个重要的方法就是loop,只有调用loop消息循环系统才能真正的起作用。
Handler: 主要包含消息的发送和接收过程,消息的发送可以通过post的一系列方法以及send的一系列方法来实现,post的一系列方法最终是通过send的一系列方法来实现
Android消息机制总结来看:Handler发送消息的过程仅仅是向消息队列中插入一条消息,MessageQueue的next方法就会返回这个消息给Looper,Looper收到消息后就开始处理,最终消息由Looper交给Handler处理,即Handler的dispatchMessage方法会被调用,这时Handler就进入处理消息的阶段。