Android 消息机制
.概念
Android消息机制主要指的是Handler运行机制以及MessageQueue/Looper的工作过程。
.对象
Android的消息机制涉及到以下对象: Handler 、 MessageQueue 、 Looper
.Handler(发送与接收)
Handler的主要功能是实现消息的发送与接收处理。
1)Handler通过send或者post来发送一条消息
2)Handler通过handleMessage方法来接收并处理一条消息
所以Handler是消息的发端与终端
.MessageQueue(消息队列)
MessageQueue是用于保存消息的队列,主要包含两个操作:插入与读取,读取本身附带着删除操作。
1)通过enqueueMessage来向消息队列插入一条消息
2)通过next从消息队列中取出一条消息,并从队列中移除
MessageQueue是单链表的数据结构,在插入以及删除操作上比较有优势
.Looper(消息循环)
Looper在消息机制中扮演着消息循环的角色,它会不停的从MessageQueue中查看是否有新消息,如果有新消息就会立即处 理,否则就一直 堵塞在那里。
1)Looper.prepare()为当前线程创建一个Looper
2) Looper.loop()开启消息循环
3) Looper是个死循环,终止消息循环需要quit或quitSafely方法
4)quit调用之后会直接退出,quitSafely会把队列中的已有消息处理完成之后才会安全退出
.过程
Handler通过send或post发送一条消息到MessageQueue,如果消息队列中没有消息,next方法会一直堵塞在那里。当有新 消息来时, next会返回这条消息并移除队列。Looper接收到next的返回之后将消息交给Handler的handleMessage来处理。