`

Looper中的消息队列处理机制

阅读更多

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系统》一书

杨长刚 著

电子工业出版社出版

0
1
分享到:
评论

相关推荐

    Android的消息处理机制--Looper,Handler

    在Android系统中,消息处理机制是至关重要的,它允许开发者在不同的线程间进行通信,尤其是主线程(UI线程)与其他工作线程之间。这一机制主要涉及到两个关键组件:`Looper`和`Handler`。下面我们将深入探讨这两个...

    安卓的消息队列机制

    当消息被添加到消息队列后,`Looper`将按照顺序不断地从消息队列中取出消息,并调用消息目标(即`Handler`)的`handleMessage()`方法来进行处理。这一步骤确保了消息能够被正确地分发到指定的目标,并在适当的时间...

    Handler和looper详解

    Handler可以通过Looper来实现消息处理机制,而Looper可以将消息发送到消息队列中,并等待消息的处理。Handler可以构造Looper对象,以便与Looper沟通,并将消息发送到消息队列中。 四、执行过程 当我们在子线程中...

    android开发教程之使用looper处理消息队列

    Android消息处理机制通常涉及到以下组件: - Handler:创建在特定线程中运行的任务,通过发送Message到消息队列来调度这些任务。 - Message:携带数据的实体,可以包含任何需要传递的信息。 - Looper:在指定线程中...

    Android应用程序消息处理机制(Looper、Handler)分析

    Android 应用程序中,消息处理机制是其异步编程的核心组成部分,主要涉及三个关键组件:Handler、Message和Looper。这种机制使得应用可以有效地管理线程间的通信,避免阻塞主线程,提升用户体验。 首先,我们需要...

    android自定义消息队列

    通过分析和实践`BlockingQueueDemo`,开发者可以深入理解Android中消息队列的工作原理,提高应用程序的响应性和可维护性。这种自定义的消息队列设计对于实现复杂的定时任务、动画控制或者其他需要精细控制的任务调度...

    Android应用程序消息处理机制(Looper、Handler)分析[收集].pdf

    在Android应用程序设计中,消息处理机制是其核心组成部分,它保证了UI线程的流畅运行和异步任务的处理。这个机制主要涉及到三个关键组件:Looper、Handler和Message。下面我们将详细探讨这三个部分以及它们如何协同...

    Android的消息处理机制

    在Android开发中,消息处理机制是非常重要的一个组成部分,它确保了应用程序能够在不同线程之间有效地传递数据和指令,尤其是在更新用户界面(UI)时。本文将详细介绍Android消息处理机制的核心概念、工作原理以及其实...

    Android消息处理机制

    在Android系统中,消息处理机制是应用程序中进行异步通信和线程间通信的核心组件,主要涉及Handler、Message和Looper三个关键元素。本篇将详细阐述这三个组件的作用、原理及其在实际开发中的应用。 首先,我们来...

    消息循环 Looper 及其源码解析

    在Android系统中,消息处理机制是应用程序中线程间通信的一种关键方式,它涉及到Handler、Message和Looper等组件。本文将深入探讨“消息循环”Looper及其源码解析,帮助开发者更好地理解和应用这一机制。 首先,...

    Android_子线程创建消息队列更新UI

    Handler通常与Looper关联,Looper是一个消息循环,负责从消息队列中取出消息并分发给相应的Handler进行处理。 接着,我们看如何在子线程中创建消息队列。默认情况下,每个Android线程都有自己的Looper,但主线程的...

    android的消息处理机制(图+源码分析)——Looper,Handler,Message

    这不, 前几天为了了解android的消息处理机制, 我看 了Looper, Handler, Message这几个类的源码, 结果又一次被googler的设计震撼了, 特与大家分享。 android的消息处理有三个核心类: Looper,Handler和Message...

    Handler、Looper

    在Android系统中,Handler、Looper和Message构成了一个关键的消息处理机制,用于实现UI线程和其他线程之间的通信。本文将从源码的角度深入探讨这个机制,帮助开发者理解其内部工作原理。 首先,我们来理解Handler的...

    android NDK实现的Hanlder-消息队列-native多线程实例

    它与Looper(消息循环)和MessageQueue(消息队列)配合工作,Looper不断从MessageQueue中取出消息并分发给对应的Handler进行处理。这种机制使得开发者可以在不阻塞主线程的情况下执行异步任务。 在NDK环境中,我们...

    android消息队列

    2. **Looper**:每个线程都有自己的Looper对象,负责不断从消息队列中取出消息,并交给对应的Handler处理。Looper通常在子线程中调用`Looper.prepare()`和`Looper.loop()`来初始化并启动消息循环。 3. **Message...

    android 多线程 looper handler

    在 Android 中,Looper 是一个消息队列的管理者,它可以将消息添加到队列中,并且可以处理消息。在有 Looper 的线程中,我们可以使用 Handler 来发送和处理消息。Handler 是一个抽象的概念,它可以将消息发送到 ...

    Android_Handler消息处理机制

    在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...

    Looper物件之角色(Demo 5)

    在Android系统中,Looper对象扮演着消息循环的重要角色,它是Android消息处理机制的核心组件之一。本文将深入探讨Looper的工作原理,以及如何在实际开发中利用它来实现高效、异步的事件处理。我们将通过一个名为...

    Android 消息处理机制原理 - 简书1

    Android的消息处理机制是其异步编程的核心组成部分,主要用于在主线程和子线程之间安全地传递数据和执行任务。在Android系统中,由于UI线程是单线程模型,所有的界面更新操作必须在主线程中执行,因此,当需要在子...

Global site tag (gtag.js) - Google Analytics