Android消息机制二

图像去模糊(二)——Richardson–Lucy算法 Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例) 阅读详情

初学Android,不可避免会出现许多错误,如果因为文章中的错误而对您造成了困扰,万分抱歉,欢迎您在评论区指正。

上一篇博客介绍了 ThreadLocal,下面,我们就可以开始Handler的学习了。
先看一看 Handler 的用法:
在这里插入图片描述

说整套Handler消息机制,肯定不止会有Handler一个类在工作,具体是由 Handler、Looper、MessageQueue、Message 四个类配合工作。

Handler:

Handler的作用是投递消息和处理消息的,它会绑定一个Looper,一个线程可以有多个 Handler,但只会有一个Looper,为什么?我们就可以看一看Handler是如何被我们创建出来的,我们通常调用Handler()这个空参构造来创建,它会通过重载最终调用到这个构造器:
在这里插入图片描述

Handler 中的 Looper 通过 Looper.myLooper() 绑定,MessageQueue 是通过 mLooper 间接绑定的。Handler 还有一个主要的方法:handleMessage,它就是我们在线程中处理事务时自定义处理规则。有了处理事务的方法,那发送消息呢?当然是sendMessage(),走去瞅瞅:

我大致看了一下,也是通过方法重载最终调用sendMessageAtTime(),然后调用 enqueueMessage(),这个是 Handler 里的方法,在这个方法里面会调用 queue.enqueueMessage(),这时,就会跳转到 MessageQueue中的enqueueMessage() 方法了。

MessageQueue:

MessageQueue 负责维护消息队列,插入消息和取出消息(具体的实现)。

MessageQueue 是在哪里创建的,是在 Looper 中,待会我们细说。

我们先看 enqueueMessage() 方法:
在这里插入图片描述

这个就是 enqueueMessage() 方法中最核心的代码,很简单,从头到尾遍历这个单链表,将 msg.next 设置为 null,再将 msg 放到链表的最末尾,当然特殊设置了 when 的话,会找到合适的位置将其插入。所以,这个单链表是有顺序的,它是按照处理时间顺序从近到远排序的。

  • 这里简单介绍一下 when 这个字段,它是从系统开始的时间到调用这个方法的毫秒数 + delayMillis。

同时,它还会唤醒休眠的 Looper。

这就是将一个Message投放到队列的具体过程。我们下面分析取的过程。

取的动作是发生在 Looper 的 loop 中,它调用的是 MessageQueue 中的 next() 方法:
在这里插入图片描述
在这里插入图片描述

这个类中的逻辑很清晰,就是在 MessageQueue 中取出一个 Message 然后将他返回,我们看一看关键的地方:

  • ptr 这是一个native code,如果为 0 的话,就会return null;这时 Looper 就会退出,我们在研究 loop 时就会看到。

Looper:

Looper 负责不断的调用 MessageQueue 的 next() 方法取出消息并交给 Handler 处理。
在这里插入图片描述
Looper 的构造,绑定一个 MessageQueue,绑定当前线程。
在这里插入图片描述
Looper 通过它初始化,要创建一个 Looper,都要先 prepare 一下,然后调用 loop 就可以开启一个 Looper 了。其中使用到的 ThreadLocal 我们前面已经介绍过了。我们使用 Looper.myLooper() 就可以得到当前线程的 Looper 了。接下来看一看 Looper 中最重要的方法,就是我们 loop 之后发生了什么:
在这里插入图片描述
无限循环去拿消息,拿完消息就 dispatchMessage,dispatchMessage是 Handler 中的方法。这样,整套流程下来,就很自然完成了线程的切换。

在 dispatchMessage,完成了执行消息的过程:
在这里插入图片描述
首先处理 msg 的 callback,这个 callback 就是一个 Runnable,它是使用 handler.post() 递交的消息队列里的。其次处理 handler 的 callback,最后处理 msg,我们可以在 handlerMessage() 中实现自己的处理逻辑。

Handler到此我也就介绍完了,其中还有很多知识点我没有说到,如 ThreadLocal 的内存泄漏,MessageQueue 的同步屏障,由于本人能力有限,无法清晰的讲解,有兴趣的同学可以自己搜一搜。

MMSE (Minimum Mean Square Error)均衡原理讲解 MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的通道模型开始。(我希望你现在也熟悉下面的表达方式。) MMSE作为一种均衡器,是一种后处理算法,它可以帮助我们找出接收到的数据,使之尽可能地接近原始数据(传输数据)。简而言之,MMSE中最重要的步骤是找到一个如下图所示的矩阵G。如果我们假设没有噪声,这个[G]矩阵可以简单的作为信道矩阵(H^-1)的倒数。但 阅读详情

相关推荐

告别GUI点点点:Formality形式化验证的TCL脚本自动化实战(附完整脚本)

本文详细介绍了如何通过TCL脚本实现Formality形式化验证的全流程自动化,显著提升验证效率并降低错误率。内容涵盖脚本框架解析、参数化设计、验证报告生成及团队协作策略,特别适合芯片设计工程师摆脱传统GUI操作,实现300%以上的效率提升。

weixin_33737134的博客 283

Android常见的几种RuntimeException

一般面试中java Exception(runtimeException )是必会被问到的问题 常见的异常列出四五种,是基本要求。更多的。。。。需要注意积累了   常见的几种如下:   1、NullPointerException - 空指针引用异常 2、ClassCastException - 类型强制转换异常。 3、IllegalArgumentExcepti

壹口尘埃 1万+

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

【Android基础回顾】二:handler消息机制

Android 的 Handler 机制 是 Android 应用中实现线程间通信、任务调度、消息分发的核心机制之一,它基于 消息队列(MessageQueue)+ 消息循环(Looper)+ 消息处理器(Handler) 组成。

Shujie 1635

AI量化交易工作台Vibe-Trading:用自然语言驱动策略回测与多智能体研究

量化交易通过数学模型和计算机程序执行投资决策,其核心在于将市场规律转化为可验证的策略。传统量化开发涉及数据获取、策略编写、回测验证等复杂工程,对非编程背景的从业者构成较高门槛。随着大语言模型技术的发展,自然语言交互正成为降低技术使用难度的关键。Vibe-Trading项目正是这一趋势的实践,它将金融工程任务封装为可调用的工具与技能,允许用户通过自然语言指令直接驱动策略回测、因子研究和投资组合分析。其技术价值在于构建了一个模块化的AI Agent框架,通过ReAct推理框架协调多个专项技能,并创新性地引入多智

weixin_28695161的博客 1568

飞书组织架构同步至LDAP:实现企业应用统一身份认证的实战指南

本文详细介绍了如何将飞书组织架构同步至LDAP,实现企业应用统一身份认证的实战方案。通过飞书开放平台API与LDAP服务的集成,企业可以大幅减少账号管理工作量,提升IT效率。文章涵盖技术架构设计、密码策略、详细配置步骤及自动化同步实现,特别适合需要统一认证体系的中大型企业。

weixin_29172201的博客 335

2022最新安卓中高级面试题集(三):Service知识点二-android消息机制

android消息机制中四个非常重要的角色: Handler: 手柄,可以用它控制消息的发送。 Looper:一个循环辅助工具,可以让线程循环起来。 MessageQueue: 存储消息的数据结构。 Message:消息本身。 Handler消息机制的工作原理: 1、创建与线程绑定的Looper,同时会创建一个与之关联的MessageQueue用于存放消息; 2、开启消息循环,从MessageQueue中获取待处理消息,若无消息会阻塞线程; 3、通过Handler发送消息,此时会将Message入队到Mes

zhuowalun8427的博客 175

Android 13 录音APK在后台无数据的处理

未获取到录音数据

chenchen4310的博客 1183

Android:Handler消息机制(二)——如何使用Handler消息机制

一、消息机制的工作步骤 Handler的工作流程分为四个步骤异步通信准备、消息发送、消息循环、消息处理: 1.异步通信准备:在主线程中创建处理器对象、消息队列对象、Handler对象,Looper和MessageQueue均属于主线程,在创建MessageQueue后Looper自动进入消息循环,此时Handler自动绑定主线程的Looper、MessageQuene,并且启动子线程 2.消...

ZytheMoon的博客 526

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 530

10. 重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器!

重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器! 全网最详细的Spring AI 文章,每章都会提供代码入口,让你更容易得入门和理解Spring AI 相关概念,直接节约你百分之六十的学习成本时间。

gorgor在码农 1067

android 消息机制浅析(二)

前面的文章中对android消息机制作了一个简单介绍,通常的用法为: 1、在带有消息循环的线程中创建handler; 2、在其他线程中创建消息,并绑定handler,通过handler发送消息; 3、在handler的handleMessage方法中处理消息。 在这里有几个疑问: 1、既然要在带有消息循环的线程中创建handler,那么为什么通常我们创建handler时,不需要创

海纳百川,壁立千仞 900

手把手教你完成基于YOLOv8的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

手把手教你完成基于YOLOv8的商店的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理员系统,可进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2459

Android Handler消息机制完全解析(二)

在阅读本篇博客之前建议先阅读此篇在看Looper源码之前必须要理解ThreadLocal,ThreadLocal在Handler消息机制中起到了至关重要的作用,面试中也经常会被问到,所以我们先来了解下ThreadLocal,通过本篇博客你将学到①ThreadLocal的作用以及原理②Looper方法的源码③Handler的dispatchMessage消息分发流程④几个常见的面试题。

乐于分享,乐于讨论,欢迎大家积极讨论 1085

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android push机制,Android消息处理机制(二)

Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环From: Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例,应用程序的主线程不断地从这个消息队例中获取消息(Looper),然后对这些消息进行处理(Handler),这样就实现了通过消息来驱动Android 应用程序是...

weixin_32049849的博客 327

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

安卓面试必问二为什么会有消息机制

在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化。有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容。 我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个 TextView上面,这时就出现了一个问题,如果这个

Jack_King007的专栏 4390

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android开发之消息处理机制(二)——消息循环

Android开发之消息处理机制(二)——消息循环 /* * Android开发之消息处理机制(二)——消息循环 * 北京Android俱乐部群:167839253 * Created on: 2011-9-1 * Author: blueeagle * Email: liujiaxiang@gmail.com */ 先介绍一下如何在Android...

努力学习 140

Android消息机制(二)之 MessageQueue 与 Looper

前言   一张图让你了解消息机制怎么实现 线程间通信。   重温了Android艺术开发探索这本书的消息机制,写这篇文章加入了博主自己的一些理解,换了些角度,希望能帮助对Android消息机制还不太理解的朋友们。若文章有不正确的地方,欢迎讨论,欢迎指出。   Android的消息机制主要是指Handler的运行机制。Handler的运行需要底层的MessageQueue和Looper的支撑。...

zz276203200的博客 527

Android消息机制(二)

1.Android的消息队列就像一个隧道一样,消息像车辆,先进先出。 2.消息发送线程不会阻塞线程,而消息接收线程会阻塞线程。这是Android的Handler机制,Handler处理完一个Message对象才会接着去取下一个消息进行处理。 3.Android里没有Global的MessageQueue。不同APK不能通过MessageQueue来交流。 4.直接使用JAVA 的 Threa...

weixin_33948416的博客 76

Android Framework-Handler消息机制(二)

在多线程通信中,Handler接收消息端的线程是独立的,无论Handler的引用在哪个线程发送消息,Handler在哪里实例化就在哪里接收消息。Handler拥有独立存在于线程内部且私有使用的Looper类来实现发送消息。总体来讲,当Handler对象在其他线程发送消息时,可通过Handler的引用对象将消息添加到MessageQueue 并找到其线程的Looper处理接收消息,Looper接收消息后再分发给Handler的接收消息方法。

weixin_43188797的博客 900

Android中Handler的消息机制分析(二)

ps:阅读原文可获取demo源码 原文链接:https://mp.weixin.qq.com/s/AKKMm-GA1hz2rPhZPQtMGg ps:源码是基于 android api 27 来分析的,demo 是用 kotlin 语言写的。 上一篇Android中Handler的消息机制分析(一)主要分析的是 Handler 讲消息的发送和 Handler 将消息的处理,这一篇分析的是 Handler 其他常用的一些知识点。 我们来看看 Handler 的 post 方法,它也是属于发送消息的方法; pu

qq_37837621的博客 160

Android 消息机制--Handler机制(二)四大原理分析

上一节主要是对Handler的机制简单的概括一下。 Android 消息机制--Handler运行机制(一) 这一节主要围绕着Handler来分析Android消息机制。主要包括四点:ThreadLocal、MessageQueue、Looper、Handler的工作原理。 ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储后,只有在指定的线程中可以获取存储的数据,则其他线程无法获取到数据。在日常开发中,用到ThreadLocal的地方很少,但是在一些特点的场景下

qq_33671877的博客 562

Android消息机制源码解析(二)——消息的执行者Handler

这一节来分析Handler的源码实现,Handler从字面理解就是处理程序、处理器的意思,在Android消息机制中它扮演着执行者的角色,消息的发送、接收、处理都是由Handler来完成的,它也是跟开发者打交道最多的,因此我们更有必要深入了解Handler的实现原理。 一、首先是Handler类的定义: public class Handler Handler有以下几个主要属性字段: fi

Battling against our own ignorance 1835

Android消息机制字典型探究(二)

Android消息机制字典型探究(二) 本文原创,转载请经过本人准许 写在前面:Android消息机制字典型探究(一)为了完成整个Android消息机制的探究,我准备将知识点细分成一个个模块。在连载的第一篇文章中,在子线程更新UI导致崩溃,我们去分析探究了Android中不允许子线程更新UI的原因,是由于线程安全的问题。当然我们目前分析的东西和写出文字都与Android消息机制无关。不过我其实是

MeloDev的博客 1014

Android消息处理机制②

内容回顾:   (1)UI thread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。   (2)当然需要一个Looper对象,来管理该MessageQueue。   (3)我们可以构造Handler对象来push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。   (4)...

mh494078416的专栏 139

android的消息机制——Handler机制 (二)

目录 定义 Android提供的一套消息传递机制 作用 用于实现子线程对UI线程的更新,实现异步消息的处理: - 在新启动的线程中发送消息 - 在主线程中获取并处理信息 为什么要用Handler 在安卓开发中: - 为了保证Android的UI操作是线程安全的,Android规定了只允许UI线程修改Activity里的UI组件; - 但在实际开发中,必然会用

Android小码农的博客 270
上一篇: Android消息机制一
下一篇: 设计模式学习(二)——创建型模式(单例、工厂、建造者)
<天各一方>
博客等级 码龄6年 17粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值