Message、Handler、MessageQueue、Looper之间的关系
来源:互联网 发布:企业工商数据api 编辑:程序博客网 时间:2024/05/01 07:49
Looper是一个消息分发器,在主线程创建的时候就会创建一个Looper对象
messageQueue :消息队列,是由message组成的一个 队列
handler:从messageQueue中获取到message,然后执行动作,可以再主线程和子线程中互相传递数据
看了源码之后大概的说一下他们的关系:
在主线程创建之后会创建一个Looper对象,创建Looper对象的时候会去创建一个messageQueue,而Looper是一个轮询器,会不停的轮询messageQueue中的消息,在获取到消息之后就会把这个消息交给handler来进行处理,在主线程中创建一个handler对象,这个handler对象不仅可以获取到消息进行处理,也可以把一个消息放到消息队列中。
举个例子来说明一下: 在子线程中更新UI
根据安卓系统的机制,UI只能在主线程中更新,如果我们想在子线程中更新UI,就要用到这一套机制了,在主线程和子线程之间传递信息。
做法就是,现在主线程中创建一个handler对象,Looper对象和messageQueue对象是不用创建的,因为在系统源码中这个是在主线程创建的时候就创建好的。然后重写handlerMessage()方法,这个方法是在handler接收到message之后执行的方法,我们把更新UI的代码放到这个方法中。然后再子线程中用sendEmptyMessage()方法来发送一个消息到消息队里。在发送完这个消息之后,Looper这个轮询器因为一直在轮询消息队列。获得到这个消息之后就会执行handlerMessage()方法,因为这个方法是在主线程中实现的。所以UI就可以更新了。
handler机制:可以再主线程中给子线程发送消息,也可以再子线程中给主线程发送消息:
在子线程中给主线程发送消息:在主线程中创建一个handler对象,然后重写handlmessage()方法,在子线程中调用handler.sendEmptyMessage()方法,然后再handlermessage() 方法中就可以执行我们想要执行的操作了,比如说更新UI
在主线程中给子线程发送消息:在子线程中new出来一个handler对象,然后重写handlerMessage方法,在主线程sendemptymessage();只是这样是不行了,因为handler要处理消息,但是在子线程中是没有Looper对象的,我们要通过Looper.prepar()来创建一个Looper对象, 在这里Looper对像被创建的时候会创建一个MessageQueue,这样就有Looper了,然后再执行完操作之后要执行以下Looper.loop()方法。去轮询这些消息,让handler来处理这些消息。在安卓的源代码中,Looper.loop()方法是一个永远为true的while循环,所以我们要在子线程中执行的动作,都要在这个方法前去执行,如果在这个方法后去执行的话,就不能被执行到
- Message、Handler、MessageQueue、Looper之间的关系
- Message,Handler,MessageQueue,Looper之间的关系
- Message、Handler、MessageQueue、Looper之间的关系
- Message/MessageQueue/Handler/Looper之间到关系
- Handler,Looper,Message,MessageQueue之间关系浅析
- Thread,Looper,Handler,Message,MessageQueue之间的关系
- Thread,Looper,Handler,Message,MessageQueue之间的关系
- Thread,Looper,Handler,Message,MessageQueue之间的关系
- Thread,Looper,Handler,Message,MessageQueue之间的关系
- 解析Handler,MessageQueue,Message,Looper之间的关系
- 描述Handler,Looper,MessageQueue,Message之间的关系
- 学习Handler,Message,MessageQueue,Thread,Looper之间的关系
- Handler,Looper ,Message和MessageQueue 之间的关系
- Thread Looper MessageQueue Message Handler之间的关系
- android Message、Handler、MessageQueue、Looper之间的关系。
- Handler Looper Message MessageQueue 的关系
- Handler,Looper,Message,MessageQueue的关系
- 详解Message,Handler,MessageQueue,Looper的关系
- java子类如何调用父类变量和方法
- Myabtis的CRUD操作
- Druid数据库连接池及内置监控的配置和使用
- Android布局(1)--线性布局(LinerLayout)
- Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
- Message、Handler、MessageQueue、Looper之间的关系
- set 的使用
- ubuntu安装RapidSVN
- Yarn简单介绍及内存配置
- 构造函数返回值的理解
- JavaSwing制作简单计算器
- Hibernate 映射文件更新
- 数据库索引的实现原理
- 微机原理==Pentium(奔腾)的指令系统(4)