Android的消息机制概述即Handler的运行机制

来源:互联网 发布:大宝眼霜 知乎 编辑:程序博客网 时间:2024/04/29 07:22
Android的消息运行机制主要是值Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。这三者实际上是一个整体,只不过我们更多的接触Handler,而在我们开发的过程的主线程中,Looper的创建是默认的。如果在子线程中直接使用Handler会报错误,因为我们没有创建Looper,这与Handler的构造函数有关。
首先来介绍Handler的工作过程:
MessageQueue是一个消息队列,他的结构是单链表形势的,这样利于循环插入和读取。
Looper是一个循环的控制器,利用for循环一直读取MessageQueue中的消息,一个线程只有一个Looper
Handler用于消息的发送和接收。通过post或者send发送消息(post方法也是通过调用send方法发送)
这里我们以常用的在主线程中发送消息,通过子线程处理(比如耗时的网络请求,文件读取等)之后返回主线程进行下一步操作。
当我们使用Handler在子线程发送消息后MessageQueue会调用enqueueMessage(Message, long)保存消息,这时候Looper循环读取到消息后会调用MessageQueue中next()方法读取到消息后,并且会把该消息给删除掉。之后会调用在主线程声明的Handler的dispatchMessage(Message)方法,通过这一步实际我们已经把子线程中处理的消息转移到了主线程中去。这样一个整体的Handler的工作过程就走完了。
细节的分析:
第一个问题,当我们在不同的线程中使用Looper循环的时候会调用不同线程中的Looper来进行循环,Looper是如何根据不同的线程来进行区分使用的?
这里会引用一个ThreadLocal类来进行线程内部的数据处理。通过他可以指定线程中的存储数据,具体的使用流程可以查看相关文档
0 0