Handler MessageQueue Message Looper关系浅析
来源:互联网 发布:淘宝助理首页怎么改 编辑:程序博客网 时间:2024/06/03 16:31
1、Handler
/** * A Handler allows you to send and process {@link Message} and Runnable * objects associated with a thread's {@link MessageQueue}. Each Handler * instance is associated with a single thread and that thread's message * queue. When you create a new Handler, it is bound to the thread / message * queue of the thread that is creating it -- from that point on, it will * deliver messages and runnables to that message queue and execute them as * they come out of the message queue. */从上面的官方文档看,Handler允许你通过一个线程类MessageQueue来发送和处理Message、Runnable对象,每一个Handler实例都与一个单线程以及该单线程的消息队列相关联。
/** * There are two main uses for a Handler: (1) to schedule messages and * runnables to be executed as some point in the future; and (2) to enqueue * an action to be performed on a different thread than your own. */
Handler的两个作用就是:
1)安排消息和Runnable对象在未来某个时间点执行
2)在非当前线程上来执行一个排到的动作
注意第二个作用,当我们需要做一些耗时的动作时,不一定要用线程或异步来完成,使用Handler同样可以达到目的。
2、Message
/** * Defines a message containing a description and arbitrary data object that * can be sent to a {@link Handler}. This object contains two extra int * fields and an extra object field that allow you to not do allocations in * many cases. * * While the constructor of Message is public,<span style="color:#ff0000;"> the best way to get one of * these is to call {@link #obtain Message.obtain()} or one of the * {@link Handler#obtainMessage Handler.obtainMessage()}</span> methods, which will * pull them from a pool of recycled objects. */
MessageQueue中存放的消息对象,官方推荐使用Message.obtain()或者Handler.obtainMessage()来从Message Pool中获取可回收的Message对象。
3、MessageQueue
1)用来存放Message的消息队列,是一种数据结构。
2)每一个线程最多只能拥有一个MessageQueue数据结构
3)主线程创建时,会创建一个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue。其他非主线程,不会自动创建Looper,要需要的时候,通过调用prepare函数来实现。
4、Looper
1)MessageQueue的管理者,每一个Looper都与一个线程相关,创建一个Looper同时会创建一个MessageQueue结构
2)除了主线程有自己默认的Looper外,其他线程需要自定义一个Looper才能接受Message。
3)Looper从MessageQueue中取出Message然后,交由Handler的handleMessage进行处理。处理完成后,调用Message.recycle()将其放入Message Pool中。
整体结构如下图(来源于网络):
0 0
- Handler MessageQueue Message Looper关系浅析
- Handler,Looper,Message,MessageQueue之间关系浅析
- 源码浅析: Message/Handler/MessageQueue/Looper
- 源码浅析: Message/Handler/MessageQueue/Looper
- Android源码浅析: Message/Handler/MessageQueue/Looper
- Message/MessageQueue/Handler/Looper之间到关系
- Handler Looper Message MessageQueue 的关系
- Message、Handler、MessageQueue、Looper之间的关系
- Message,Handler,MessageQueue,Looper之间的关系
- Handler Looper Messagequeue Message 细节以及关系
- Handler,Looper,Message,MessageQueue的关系
- Message、Handler、MessageQueue、Looper之间的关系
- 详解Message,Handler,MessageQueue,Looper的关系
- Looper,Handler,Message,MessageQueue
- Message,MessageQueue,Looper,Handler
- Message,Handler,Looper,MessageQueue
- Handler、Looper、MessageQueue、Message
- Handler,Message,Looper & MessageQueue
- C-static,const,volatile,extern
- java 17:数据域封装
- Android SDK开发包国内下载地址
- Ubuntu12.04配置java开发环境
- QQ群内提问和答疑的总结和反思
- Handler MessageQueue Message Looper关系浅析
- eclipse 配置maven web项目
- tinyos的学习
- linux下关于execve函数的简单解析
- 数组的冒泡排序和折半查找
- hello world!
- 把网站部署到IIS服务器上
- 优才网电话面试后的感想
- 安卓四大组件之service服务