Looper中的消息队列处理机制
Looper也提供了消息的定义、消息的发送、消息的处理者的自定义和消息队列。在其头文件Looper.h中,定义了消息结构体Message,它只有一个类型成员,Message的定义如下(见文件Looper.h,下同):
消息的处理者可由MessageHandler进行处理:
使用者可通过派生出子类来扩展消息。对消息的处理,需要在MessageHandler的子类中重载handleMessage函数。
它们将被封装到消息“信封”MessageEnvolope中,然后送到消息队列中。MessageEnvolope的定义如下:
Looper中维护着一个自己的消息队列:
可以使用Looper的sendMessageAtTime(另外两个版本也最终都使用的是sendMessageAtTime)向消息队列中发送消息:
消息发送函数将根据实参,将它们打包到消息信封中,然后放置到消息队列中。最后,若消息队列中原先没有消息(即在接收方睡眠等待),则让wake函数写入字符到管道写端唤醒接收方在pollInner中epoll_wait上的睡眠等待,让其开始对消息接收处理。pollInner对消息队列的处理的代码片段如下:
当醒来后,在上面的行275若检查到消息队列不为空,则检查队列上的第一项是不是超时了。若超时了,则取下它,调用消息信封中指定的MessageHandler的handleMessage函数去处理消息(行294)。
因此,借助于Looper的sendMessageXXX函数和pollOnce函数,可以向Looper内部的消息队列发送消息,这时pollOnce的调用者将被唤醒去处理消息,当消息处理完毕和没有消息时,将会睡眠等待。
本文节选自《深入剖析Android系统》一书
杨长刚 著
电子工业出版社出版
相关推荐
在Android系统中,消息处理机制是至关重要的,它允许开发者在不同的线程间进行通信,尤其是主线程(UI线程)与其他工作线程之间。这一机制主要涉及到两个关键组件:`Looper`和`Handler`。下面我们将深入探讨这两个...
当消息被添加到消息队列后,`Looper`将按照顺序不断地从消息队列中取出消息,并调用消息目标(即`Handler`)的`handleMessage()`方法来进行处理。这一步骤确保了消息能够被正确地分发到指定的目标,并在适当的时间...
Handler可以通过Looper来实现消息处理机制,而Looper可以将消息发送到消息队列中,并等待消息的处理。Handler可以构造Looper对象,以便与Looper沟通,并将消息发送到消息队列中。 四、执行过程 当我们在子线程中...
Android消息处理机制通常涉及到以下组件: - Handler:创建在特定线程中运行的任务,通过发送Message到消息队列来调度这些任务。 - Message:携带数据的实体,可以包含任何需要传递的信息。 - Looper:在指定线程中...
Android 应用程序中,消息处理机制是其异步编程的核心组成部分,主要涉及三个关键组件:Handler、Message和Looper。这种机制使得应用可以有效地管理线程间的通信,避免阻塞主线程,提升用户体验。 首先,我们需要...
通过分析和实践`BlockingQueueDemo`,开发者可以深入理解Android中消息队列的工作原理,提高应用程序的响应性和可维护性。这种自定义的消息队列设计对于实现复杂的定时任务、动画控制或者其他需要精细控制的任务调度...
在Android应用程序设计中,消息处理机制是其核心组成部分,它保证了UI线程的流畅运行和异步任务的处理。这个机制主要涉及到三个关键组件:Looper、Handler和Message。下面我们将详细探讨这三个部分以及它们如何协同...
在Android开发中,消息处理机制是非常重要的一个组成部分,它确保了应用程序能够在不同线程之间有效地传递数据和指令,尤其是在更新用户界面(UI)时。本文将详细介绍Android消息处理机制的核心概念、工作原理以及其实...
在Android系统中,消息处理机制是应用程序中进行异步通信和线程间通信的核心组件,主要涉及Handler、Message和Looper三个关键元素。本篇将详细阐述这三个组件的作用、原理及其在实际开发中的应用。 首先,我们来...
在Android系统中,消息处理机制是应用程序中线程间通信的一种关键方式,它涉及到Handler、Message和Looper等组件。本文将深入探讨“消息循环”Looper及其源码解析,帮助开发者更好地理解和应用这一机制。 首先,...
Handler通常与Looper关联,Looper是一个消息循环,负责从消息队列中取出消息并分发给相应的Handler进行处理。 接着,我们看如何在子线程中创建消息队列。默认情况下,每个Android线程都有自己的Looper,但主线程的...
这不, 前几天为了了解android的消息处理机制, 我看 了Looper, Handler, Message这几个类的源码, 结果又一次被googler的设计震撼了, 特与大家分享。 android的消息处理有三个核心类: Looper,Handler和Message...
在Android系统中,Handler、Looper和Message构成了一个关键的消息处理机制,用于实现UI线程和其他线程之间的通信。本文将从源码的角度深入探讨这个机制,帮助开发者理解其内部工作原理。 首先,我们来理解Handler的...
它与Looper(消息循环)和MessageQueue(消息队列)配合工作,Looper不断从MessageQueue中取出消息并分发给对应的Handler进行处理。这种机制使得开发者可以在不阻塞主线程的情况下执行异步任务。 在NDK环境中,我们...
2. **Looper**:每个线程都有自己的Looper对象,负责不断从消息队列中取出消息,并交给对应的Handler处理。Looper通常在子线程中调用`Looper.prepare()`和`Looper.loop()`来初始化并启动消息循环。 3. **Message...
在 Android 中,Looper 是一个消息队列的管理者,它可以将消息添加到队列中,并且可以处理消息。在有 Looper 的线程中,我们可以使用 Handler 来发送和处理消息。Handler 是一个抽象的概念,它可以将消息发送到 ...
在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...
在Android系统中,Looper对象扮演着消息循环的重要角色,它是Android消息处理机制的核心组件之一。本文将深入探讨Looper的工作原理,以及如何在实际开发中利用它来实现高效、异步的事件处理。我们将通过一个名为...
Android的消息处理机制是其异步编程的核心组成部分,主要用于在主线程和子线程之间安全地传递数据和执行任务。在Android系统中,由于UI线程是单线程模型,所有的界面更新操作必须在主线程中执行,因此,当需要在子...