Android之MessageQueue源码分析(第一篇:创建对象)

Android MessageQueue源码分析 MessageQueue是Android消息机制的核心,熟悉MessageQueue能够帮助我们更清楚详细地理解Android的消息机制。这篇文章会介绍MessageQueue消息的插入(enqueueMessage)和读取(next),native层的消息机制,以及IdleHandler和SyncBarrier的逻辑原理。源码是基于6.0。 阅读详情

前言

    Handler机制,用于线程间通信,不单单是主线程与工作线程之间,任意两个线程间都可以,其中MessageQuque对象用于持有Message对象,相当的重要,MessageQueue类位于/android/os/MessageQueue.java文件中,今天一起学学MessageQueue的实现

 

构造方法分析

    MessageQueue(boolean quitAllowed) {
        mQuitAllowed = quitAllowed;
        mPtr = nativeInit();
    }

创建MessageQueue对象的构造方法,传入的参数quitAllowed,表示是否允许退出(线程在循环中,读取标志位决定能否结束)

MessageQueue对象用于持有Message对象,而MessageQueue对象本身则由Looper对象持有,在Looper中会调用该构造方法创建MessageQueue对象

1、保存是否允许退出的标志位

MessageQueue对象持有的mQuitAllowd实例变量中,保存了是否允许线程退出的标志位

2、保存一个指针吗?

MessageQueue对象持有的实例变量mPtr用于保存nativeInit方法的返回值

 

nativeInit()方法分析

    private native static long nativeInit();

nativeInit()会返回一个long值,最终由JNI层访问C/C++层的代码完成调用,这个long值不得而知,后面补充一下

 

总结

1、MessageQueue对持有1个称为消息列表的单链表,单链表中的每一个元素都是Message对象

2、MessageQueue对象是在Looper的构造方法中创建的,即创建Looper对象时,Looper对象会持有一个MessageQueue对

3、Looper、Handler、Message、MessageQueue,在handler机制的java层中,可见MessageQueue的地位

4、当我们创建的MesageQueue对象允许退出时,执行线程会执行方法后正常结束,反之MessageQueue对象如果不允许退出,调用MessageQueue对象方法的线程,将不会得到结束的机会,比如主线程中创建的Looper对象持有的MessageQueue对象是不允许退出的,这刚好满足GUI应用的需求,主线程不退出,保证程序可以一直运行

T265摄像头插着开机后,需要重新插拔才能正常启动 阅读详情

相关推荐

股票行情接口,最全的接入方法

股票行情接口一般有两种,一种是WebSocket,一种是http,通过WebSocket可以获取逐笔的股票tick数据,实时并且高效;通过http接口可以获取股票行情接口中的股票历史数据;WebSocket是一种高效的双向通信协议,它允许数据的实时推送,避免了不断的轮询请求。其次,WebSocket允许您订阅特定的数据源或股票数据产品,只接收您感兴趣的信息,提高了数据的效率和可用性。通过接入股票行情数据的HTTP接口,您可以将数据导入到自己的分析工具或系统中,进行更深入的数据分析、模型构建和决策支持。

apifinance的博客 3423

不懂 Message,MessageQueue,Looper,Handler的看这个就明白了

Message,MessageQueue,Looper,Handler详解+实例 收藏 一、几个关键概念 1、MessageQueue:是一种数据 结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。创建一个线程的时候,并不会自动 创建其MessageQueue。通常使用一个Looper对象对该线程的MessageQueue进行管理。主线程创建时,会创建一个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue。

402

5分钟搞懂深度学习如何革新声源定位:从GCC-PHAT到DNN的实战对比

本文深入对比了深度学习与传统GCC-PHAT方法在声源定位领域的实战表现。通过具体实验数据,展示了DNN模型在强混响、低信噪比等复杂场景下,如何实现定位准确率的显著提升,并探讨了其数据驱动范式带来的鲁棒性优势与工程部署挑战。

3a9bq4r8t2y的博客 223

Android MessageQueue 源码分析

这个改变在处理对象比较时非常重要,因为 == 操作符只比较对象的引用(即它们是否是同一个对象的引用),而 equals 方法则用于比较两个对象的内容是否相等。在 Android 的消息处理机制中,消息并不是直接添加到 MessageQueue 中的,而是通过与 Looper 相关联的 Handler 对象来添加的。如果循环器当前没有待处理的消息,或者所有待处理的消息的执行时间都晚于当前时间(即它们还没有到被处理的时机),则该方法返回 true,表示循环器当前是空闲的。

fukaiqiang 1107

Keil5 安装与卸载全攻略:从零开始到完美避坑

本文提供了Keil5集成开发环境的完整安装与卸载指南。针对嵌入式开发新手,详细解析了安装前的关键准备、MDK核心与C51双环境的安装激活步骤、常见问题排查,并重点介绍了如何彻底卸载软件以避免残留问题,帮助用户从零开始搭建稳定高效的开发环境。

weixin_29172963的博客 636

ANSYS Fluent DPM实战:从单点到锥形注入的粒子模拟全流程解析

本文深度解析了ANSYS Fluent中离散相模型(DPM)的粒子注入(Injection)设置全流程。从单点注入到锥形喷雾,详细阐述了不同注入类型的物理本质、参数逻辑与适用场景,并提供了粒径分布、湍流扩散等高级参数设置技巧与实战避坑指南,帮助工程师精准模拟喷雾、粉尘等粒子运动行为。

weixin_29276847的博客 652

Android消息机制(5)MessageQueue深入解析

介绍 前面的博客已经简要分析了Handler,Looper,MessageQueue的大体框架,我们已经知道,Handler主要作用是封装Message的发送和接收,Looper的功能是不断轮询MessageQueue,取出Message交给对应的Handler执行,而消息队列的休眠,唤醒,及我们比较少用到的IdleHandler,同步屏障等功能都是由MessageQueue实现的,所以下面就来详细分析上述功能是如何实现的。 IdleHandler 首先是IdleHandler,IdleHandler是一个

安静的奥里维 1816

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题

在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后.

叶子叶来 9611

Android Handler机制——MessageQueue

Android Handler机制——MessageQueue 一、构造 Message mMessages; private final boolean mQuitAllowed; private long mPtr; // used by native code MessageQueue(boolean quitAllowed) { mQuitAllowed = quitAllowed; mPtr = nativeInit(); }   从MessageQueue的构造可以看出,其主要是两个参数

qq_38401088的博客 1064

如何给K8S配置一个具有永久有效的kubeconfig

在 Amazon EKS 环境中,Kubernetes 的认证机制与 AWS IAM 深度集成,通过aws-iam-authenticator动态生成临时凭证。这种设计虽然增强了安全性,但给需要持久化凭证的工具链(如 CI/CD 系统中的 KubeVela)带来了挑战。具体表现为:临时凭证失效​​:默认 Token 有效期为 15 分钟至 1 小时;​​IAM 角色限制​​:直接使用aws eks get-token生成的凭证无法持久化

小杨同学的博客 659

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2792

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用     利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。 MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web S...

weixin_34033624的博客 1173

ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优

会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。

PX4-SLAM-PNC 171

Android HandlerThread、Looper、MessageQueue 源码分析

在Android开发中,大家应该对有一定了解。顾名思义,是Thread的一个子类。与普通的Thread不同,Thread 通常一次只能执行一个后台任务,如果需要执行多个任务,就必须创建多个线程,这样容易导致资源管理复杂,甚至可能出现内存泄漏等问题。而有一个显著的特点,它能够串行地执行多个任务。每个任务通过消息的形式排队执行,线程池中的任务按顺序依次处理,无需手动管理线程的生命周期或调度过程。我们只需通过 Handler 将任务发送到中,它会自动按顺序执行,极大简化了开发过程。使用。

WeiPR的博客 1034

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深入源码解析Android中的Handler,Message,MessageQueue,Looper

本文主要是对Handler和消息循环的实现原理进行源码分析,通过分析源码的方式去探索Thread、MessageQueue、Looper、Message以及Handler的实现原理,并最终通过一张图的形式将它们之间的关系展示出来。

孙群 3万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 消息机制 - Handler, Looper, Message, MessageQueue 的源码分析

转载请注明本文出自 clevergump 的博客:http://blog.youkuaiyun.com/clevergump/article/details/50776596, 谢谢! 一. 前言 Android 的消息系统, 主要涉及到四个类: Handler, Message, MessageQueue 和 Looper. 而我们在日常开发中, 通常是将 Handler 对象定义在主线程中用于更新UI, 这样..

clevergump的专栏 2139

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android之Handler、Looper、MessageQueue源码分析.md

概述 Android中的Handler、Looper、MessageQueue是用来解决线程间通讯问题的一种机制.介绍它们的文章非常多,这里做一些学习和整理,帮助自己理解,也希望能方便大家. 一句话 “Looper不断获取MessageQueue中的Message,然后由Handler来处理” 一张图 先记住一句话和一张图,对这三者有一个感性的认识,后面会介绍一个简单的demo,通过...

2513

Android Handler,MessageQueue,Looper源码解析

本文主要针对Handler机制原理进行源码分析,如果对Android的Handler机制不熟悉的可以查看Android Handler机制。 总结来说,Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制。那这种机制如果仅仅通过一个Handler是无法完成任务的,还需要Looper、MessageQueue、Thread等的协作才能完成这一整套的异步消息循环处理机制。这...

红日 954

Android源码解析——Handler、Looper与MessageQueue

代表的是消息队列中的第一条消息,如果 mMessages 为空,说明消息队列是空的,或者 mMessages 的触发时间要比新消息晚,则将新消息插入消息队列的头部;如果 mMessages 不为空,则寻找消息列队中第一条触发时间比新消息晚的非空消息,并将新消息插到该消息前面。方法是一个无限循环的方法,如果消息队列中没有消息,则该方法会一直阻塞,当有新消息来的时候。//如果消息队列是空的或者队列中第一条的消息的触发时间要比新消息长,则将新消息作为链表头部。

2401_89317591的博客 1088

Android消息机制分析:Handler、Looper、MessageQueue源码分析

1.前言 关于Handler消息机制的博客实际上是非常多的了。 之前也是看别人的博客过来的,但是过了一段时间之后,一些细节也就忘了。 所以,就自己撸一篇,权当笔记,方便以后翻阅。 这篇文章主要是分析Handler消息机制原理以及收集一些面试题来讲解,熟悉的话可以不用看了。 本文源码基于android 27。 2.Android消息机制概述 2.1 本质 Android的消息...

四月葡萄的博客 460

Handler、Looper、MessageQueue、HandlerThread、ActivityThread、Message源码分析

一、Handler、Looper、MessageQueue、HandlerThread、ActivityThread、Message结构 1、Message:消息;其中包含了消息ID,消息对象以及处理的数据等,由MessageQueue统一列队管理,终由Handler处理 2、MessageQueue:消息队列;用来存放Handler发送过来的消息,并按照FIFO(先入先出队列)规则执行。当然...

chenhande1990chenhan的专栏 480

Android源码分析——Looper,Messagequeue,Message,handler初始化及handler机制简介

Handler机制算是我入门源码的第一节。看得比较仔细。体会较多。mark一下。 顺序:先科普一下Handler基本功,然后再细讲下源码 一、Handler目的: 目的:Handler机制来处理了子线程去更新UI线程控件问题。 二、handler关系图: 其实各种书籍上都有这么一张图。但是主要是学习源码,所以还是自己手画一张“流程图”。 三、handler知识点总结: (若以下总结都

haibo_bear的博客 2862

【安卓笔记】Handler,Looper,MessageQueue,Message源码分析

这篇文章将分析android中的消息机制。 通过上一篇文章,我们了解到: 每一个handler其实都绑定了一个线程(Thread)和消息队列(MessageQueue),消息队列中存放的是一堆待处理的消息,Looper通过一个loop方法不断从消息队列中获取到消息(Message)(先进先出的方式),执行消息队列的出队方法,然后该消息会通过自身绑定target(其实是一个handler

RowandJJ 2939

Android 消息机制:Handler、MessageQueue 和 Looper

在这篇文章中,我们将会讨论 Android 的消息机制。提到 Handler,有过一些 Android 开发经验的都应该很清楚它的作用,通常我们使用它来通知主线程更新 UI。但是 Handler 需要底层的 MessageQueue 和 Looper 来支持才能运作。这篇文章中,我们将会讨论它们三个之间的关系以及实现原理。 在这篇文章中,因为涉及线程方面的东西,所以就避不开 ThreadLocal...

你好,开发者 1487

Android Handler消息机制源码分析——第一部分:Looper与MessageQueue

Android Handler消息机制源码分析——第一部分:Looper与MessageQueue由于在Android中,网络请求不能运行在主线程中,同时一些耗时的操作也不建议运行在主线程中。因此多线程以及线程间通信在Android中显得更为重要了,而安卓SDK中也提供给我们很多的多线程机制,譬如:Handler,AsyncTask,以及基于这些机制而来的IntentService,AsyncSer

优快云文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 1061

android messagequeue 底层,理解android中的MessageQueue

一 前言阅读本文的前提是你已经知道什么是Handler、Looper、ThreadLocal等基本类。源码位置可以在这里搜索。二 源码分析enqueueMessage方法分析boolean enqueueMessage(Message msg, long when) {if (msg.target == null) {throw new IllegalArgumentException("Mess...

weixin_30582943的博客 452
上一篇: Android之Message源码分析(第二篇:消息池)
下一篇: Java之HashMap源码分析(第六篇:结点对象分析)
西二旗王员外
博客等级 码龄15年 875粉丝 246原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值