MessageQueue
消息队列 存放hander 发布的消息 .消息队列 通常附属于某一个创建他的线程
Looper.myQueue 获取当前线程的消息队列. 如果没有queue就报异常.
android 启动时候 默认为UI Thread 创建一个关联的消息队列.用来管理 程序的一些上层组件
activities broadcast receivers 等等.你可以在自己的子线程创建hander 于UI thread 进行通讯.也就是说我们程序一启动我们的UI 线程也就是主线程 就会有一个消息队列.如果我们开启另外一个子线程 就不会有有messagequeue消息队列
Hander
通过hander 你可以发布或者处理 一个消息或者一个runable 实例.每个hander 都会与 唯一的一个线程 以及改线程的消息队列 关联.当你创建一个hander 的时候 默认情况下 它将关联到创建它的这个线程 和该线程的消息队列.也就是说 你通过hander 发布消息的时候 消息将会发送到与它关联的这个消息队列.当然也之能处理改消息队列的消息.
也就是说 一个hander 对应一个线程以及附属于该线程的消息队列.
比如 我们现在有一个hander 对象 这个hander 在UI 线程创建 叫xh_hander .
xh_hander 和娜个线程关联?
用这个hander 发送消息的话 它将发送给那个线程的消息队列?
这时 我们用这个hander 对象发送消息 他有发送消息的方法.
hander 主要方法
public final boolean sendMessage(Message msg)
消息放入hander 关联的消息队列.消息队列尾部
消息放进去的一段 消息不会阻塞.处理消息的一段就可能会有阻塞.
public void handerMessage(Message msg)
关联到该消息队列的线程通过调用hander 的handermessage 放入接受和处理消息.通常需要子类化hander 实现handerMessage
Looper
Looper 扮演一个Hander 和消息队列之间通讯桥梁的较色.程序组件 首先通过Hander把消息传递给Looper Looper 把消息放进队列.Looper也把消息队列里的消息 传递给所有Hander。Hander 接受到消息后调用handeMessage 进行处理.
可以通过Looper.myLoopger 获取当前线程的looper 实例.如果当前线程未关联一个looper实例 返回空 不会抛空指针异常.
可以通过静态方法 Loopger.getMainLooper 方法获取主线程的Looper 实例。主线程默认是有一个Looper 对象.但是我们的子线程是没有的.我们子线程如何获取Looper 对象.
如果一个线程中调用Looper.prepare 那系统就会自动为该线程建立一个消息队列.然后调用Looper.loop 之后进入了消息循环. 之后可以发消息 去消息 处理消息.这个如何发送消息 和如何处理消息 可以在其他线程中 通过hander 来做.但前提是我们的hander 知道这个子线程的looper.如果你不是在子线程运行 Looper.myLoopger 一般是得不到子线程的Looper.
分享到:
相关推荐
为了在其他线程中使用`Handler`,我们需要手动调用`Looper.prepare()`初始化Looper,然后用`Looper.loop()`启动消息循环。一旦启动,`Looper`就会持续从消息队列中取出`Message`并分发给对应的`Handler`处理。 在`...
- MessageQueue是消息队列,存储待处理的消息。Looper会从这个队列中取出Message并分发。 - 学习案例可能包含使用`Runnable`配合`postDelayed()`来实现异步操作和延时处理。 6. **理解Android生命周期**: - 在...
3. **发送消息**:子线程通过调用Handler的sendMessage()或post(Runnable)方法发送消息或Runnable对象给Handler,这些消息会被加入到MessageQueue中。 ```java Message message = new Message(); message.what =...
Looper的loop()方法是一个死循环,不断地从消息队列中取出Message,直到消息队列为空或者Looper.quit()被调用。 至于"工具"方面,理解Handler可以帮助开发者创建高效、健壮的应用。例如,使用Handler可以避免频繁的...
在“lumen-api-hander-master”项目中,我们可能看到一个名为`ApiExceptionHandler`的类,这个类扩展了Lumen的`ExceptionHandler`。这个自定义异常处理器通常会包含以下功能: 1. **捕获异常**:覆盖`render`方法,...
2. **MessageQueue**: 顾名思义,MessageQueue是一个消息队列,用于存储待处理的消息。它使用链表数据结构,方便高效地进行消息的插入和取出。Message对象包含了消息标识(what)、额外参数(arg1, arg2)、传递的...
标题“hander_sy1.rar_android”表明这是一个关于Android Handler的实例教程,适合初学者进行学习。下面我们将深入探讨Handler的相关知识点。 1. **什么是Handler?** Handler是Android中的一个关键组件,用于在...
xmind_hander源码在测试过程中,测试用例的管理和统计是非常重要的环节,对于测试质量的保证和测试效率的提高都具有重要意义。Xmind是一款非常优秀的思维导图工具,可以方便地创建和管理测试用例。而其中的自动统计...
这里使用post()将多个线程提交到Handler的MessageQueue里面,这样线程就会顺序执行,这样任务所操作的对象在同一时间里就不会有多个线程同时操作了,也就实现了同步操作了。同时注意,队列是同步操作的一个重要手段...
2. **消息队列**:所有发送给`Handler`的消息都会被放入到消息队列(`MessageQueue`)中排队等待处理。 3. **消息循环**:`Looper`类负责管理消息队列,它通过一个无限循环不断地从消息队列中取出消息并交给`Handler...
2、在图片加载类初始化时,我们会在一个子线程中维护一个Loop实例,当然子线程中也就有了MessageQueue,Looper会一直在那loop停着等待消息的到达,当有消息到达时,从任务队列按照队列调度的方式(FIFO,LIFO等),...
- **消息处理**:`Looper`循环不断地从`MessageQueue`中取出消息,并交给对应的`Handler`对象处理。具体而言,`Looper`通过`dispatchMessage()`方法将消息传递给`Handler`,然后`Handler`通过重写`handleMessage()`...
最后,关于提到的"压缩包子文件的文件名称列表"hander2,这可能指的是处理程序的实现或配置文件。在实际开发中,这些文件通常包含在项目的类路径或部署包中,以便服务器能够找到并使用它们。 总结起来,JAX-RPC Web...
"Android中Handler与Message的简单实例" Android中Handler与Message的简单实例是Android开发中非常重要的知识点。Handler和Message都是Android中用于线程之间通信的机制。 Handler是Android中用于发送和处理消息...
Handler负责发送和处理Message,Looper是主线程的消息循环,它不断检查Message Queue是否有新消息,如果有,就分发给相应的Handler处理。 创建一个图片浏览器,我们通常会用到以下技术: 1. **ListView或...
《yyl-hander:JavaScript模块化开发的共用方法封装》 在JavaScript开发中,模块化已经成为提升代码可维护性和复用性的重要手段。本文将深入探讨“yyl-hander”这一工具,它是一个用于打包过程中的方法集合,旨在让...
Adobe Reader是一款广泛使用的PDF(Portable Document Format)阅读器,由Adobe公司开发,旨在方便用户查看、打印和注释PDF文件。这款软件的核心功能是提供一个直观的界面来浏览PDF文档,而其特色在于它能够在文件...
模拟温度监控系统源码(周期绘制温度趋势的UI界面)是一个用于学习和实践温度监控和数据采集系统的资源。该源码通过模拟温度数据,并利用定时器周期性地产生这些数据,同时在用户界面上实时绘制温度变化的趋势图。...
处理者由 6.0.2。生成。入门要从头开始构建该地点,请使用: rojo build -o " Hander.rbxlx " 接下来,在Roblox Studio中打开Hander.rbxlx并启动Rojo服务器: rojo serve 如需更多帮助,请查阅。
Looper是消息循环,它持续检查Message Queue(消息队列),并将消息分发给相应的Handler进行处理。Message是实际携带数据的实体,而Handler则负责发送和处理这些消息。在网络操作完成后,可以通过创建一个Handler...