Handler、Looper、MessageQueen、Message的关系及个人理解
来源:互联网 发布:比较两个数组的差异 编辑:程序博客网 时间:2024/06/06 18:45
很久之前就说过要写这篇博客的,但是由于学习上过于紧张,一直空写。人就是这样,总会被这样那样的事情左右着。希望以后能做到一周一到两篇关于所学知识的总结或理解吧。治愈懒癌症,做一个有计划有条理的人。
在我看来Handler、Looper、MessageQueen、Message分别代表的是老板、秘书、日程表、每个日程。日程表(MessageQueen)负责存储将要执行的日程(Message),而秘书(Looper)的任务就是一直查看着日程表(MessageQueen),看有没有需要老板执行的日程(Message)。如果有的话,就取出来交给老板去处理。于是很容易得出如下的结论和概括:
Message: Handler接收和处理的消息对象
MessageQueen: 存储消息对象的队列
Looper: 负责读取MessageQueen中的消息,读到消息之后就把消息交给Handler去处理。
Handler:发送消息和处理消息
首先应该知道的是,一个线程只能拥有一个Looper,如果希望Handler可以很好地正常地工作,那么在Handler所在的线程当中必须要有Looper和MessageQueen这两个对象。这很容易理解,老板要做到有效率有条理的工作,离不开秘书对日程表的完美安排。可能有人会问,我平时在主线程中使用Handler,也没有看到要创建Looper和MessageQueen对象啊。其实那是因为系统默认地给主线程初始化了一个Looper对象,因此呢你没有看到什么报错的提示,倘若你在子线程中创建你的Handler,而没有创建Looper对象,那就会报如下的错误。下面是一段Looper的源代码的截图:可以看出如果没有Looper,则会抛出一个异常。
那么Looper是如何初始化的呢?其实很简单,就像抛出的异常那样,直接Looper.prepare()即可。我们来看一下这个方法的源码片段。
下面给出源码中的一段示例用法:
可以看到Handler初始化之前必须调用prepare方法,初始化完成之后,就调用looper方法,一直不停地向消息队列中获取消息。
- Handler、Looper、MessageQueen、Message的关系及个人理解
- Android handler Looper MessageQueen Message 关系
- Handler,Message,Looper的关系
- Message MessageQueue Runnable Looper 和Handler的关系理解
- 学习并理解 handler,looper,message之间的关系
- Handler、Looper、Message的理解
- 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)
- 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(下)
- looper,handler,message关系
- Handler Looper Message 理解
- Handler Looper Message MessageQueue 的关系
- android Looper Message Handler中三者的关系
- Message、Handler、MessageQueue、Looper之间的关系
- Looper、Message和Handler的关系
- Message,Handler,MessageQueue,Looper之间的关系
- 【Android基础知识】Handler、Message、Looper的关系
- Handler,Looper,Message,MessageQueue的关系
- Message、Handler、MessageQueue、Looper之间的关系
- Ubuntu安装OBS(Open Broadcaster Software)
- python入门(三)
- 基于第三方统计工具做的网站访问次数统计。
- shell(2):shell中关于if,while,输入参数,函数,c++进程等相关知识应用汇集事例
- Handler当做内部类,导致内存泄露的问题
- Handler、Looper、MessageQueen、Message的关系及个人理解
- 再探epoll实现机制
- Hadoop MapReduce作业提交与初始化过程分析
- 第一天:NodeJs Windows环境搭建、学习资料地址、注意事项总结
- Hibernate缓存何时使用和如何使用
- CodeForces - 630N Forecast (解一元二次方程组)
- 拷贝构造,构造函数,析构函数的调用顺序
- C语言获得数组长度的函数
- SQL Server 设置自增长字段的开始值