Android解析异步消息处理机制

news2024/9/23 9:36:10

文章目录

  • Android解析异步消息处理机制
    • Message
    • Handler
    • MessageQueue
    • Looper

Android解析异步消息处理机制

Android中的异步消息处理主要由4个部分组成:Message、Handler、MessageQueue和Looper。其中Message和Handler在上一小节中我们已经接触过了,而MessageQueue和Looper对于你来说还是全新的概念,下面我就对这4个部分进行一下简要的介绍。

Message

Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。上一小节中我们使用到了Message的what字段,除此之外还可以使用arg1和arg2字段来携带一些整型数据,使用obj字段携带一个Object对象。

Handler

Handler顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是使用Handler的sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。

MessageQueue

MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。

Looper

Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。

了解了Message、Handler、MessageQueue以及Looper的基本概念后,我们再来把异步消息处理的整个流程梳理一遍。首先需要在主线程当中创建一个Handler对象,并重写handleMessage()方法。然后当子线程中需要进行UI操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。之后这条消息会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,于是我们在这里就可以安心地进行UI操作了。

整个异步消息处理机制的流程示意图如图所示:

在这里插入图片描述

一条Message经过这样一个流程的辗转调用后,也就从子线程进入到了主线程,从不能更新UI变成了可以更新UI,整个异步消息处理的核心思想也就是如此。

如果对你有帮助,就一键三连呗(点赞+收藏+关注),我会持续更新更多干货~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据基础:离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 ​​​​​​​二、实时数仓建设思路 离线与实时数仓区别和建设思路 ​​​​​​​一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下: 对比方面 离线数仓 实时数仓 架构选择 传…

ComsolMatlab 两级串联扩张式消声器仿真解与解析解

消声器的声学性能通常要求消声器在工作频率范围内有较大的消声量以及较宽的消声频带。常用的消声器声学性能评价指标通常有传递损失、插入损失、减噪量三种。其中插入损失只能反映整个系统在安装消声器前后声学特性的变化,并不能直接反映消声器本身单独具有的属性。…

计算机毕业设计选题推荐-中药材进存销管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

假期学习--对象底层结构和继承链

OC本质底层实现转化其实都是C/C代码。 OC对象的本质就是结构体。 NSObject底层是struct objc_object结构体 ;struct objc_class : objc_object { …省略无关代码 // Class ISA; //ISA(从objc_object继承过来的) Class superclass; //指向其父类 cache_t cache…

王伊朵闪耀“快乐阳光”舞台 再夺全国冠军

在近日落幕的“赛克杯”第20届快乐阳光少年儿童歌曲卡拉OK电视大赛全国总决赛中,就读于北京市建华实验学校,年仅11岁的小选手王伊朵以其出色的唱功和卓越的舞台表现,一举夺得全国冠军,成为本次大赛一颗耀眼的小明星。 王伊朵自小对…

基于NNG的六种通信模式

NNG是一个消息传递框架,用来解决常见的消息传递问题。NNG是nanomsg的继任版本,纯c语言开发,工作模式分为一下几种: Pipeline单向管道 此模式可用于解决生产者/消费者问题,包括负载均衡。 消息从推侧流向拉侧。 如果多…

‌U盘闪一下就没了?‌如何有效恢复数据

在日常使用U盘的过程中,‌我们可能会遇到一种突发情况:‌U盘插入电脑后仅仅闪了一下就消失了,‌无法再被识别或访问。‌这种情况下,‌U盘中的数据似乎瞬间变得遥不可及。‌然而,‌不必过于担心,‌因为仍然有…

Kafka消息积压的典型场景及解决方案

Kafka消息积压的典型场景: 1.实时/消费任务挂掉 比如,我们写的实时应用因为某种原因挂掉了,并且这个任务没有被监控程序监控发现通知相关负责人,负责人又没有写自动拉起任务的脚本进行重启。 那么在我们重新启动这个实时应用进行…

【Docker】构建Harbor仓库

下载软件包地址:https://github.com/goharbor/harbor/releases Harbor 是由vmware公司开源的企业级 Docker Registry 项目。 它提供了以下主要功能和特点: 1. 基于角色的访问控制(RBAC):可以为不同的用户和用户组分…

告别繁琐!Xinstall地推码,让App安装统计变得更简单!

Xinstall地推码:开启App推广新篇章 在移动互联网时代,App推广的重要性不言而喻。然而,传统的推广方式往往伴随着繁琐的操作和难以精准统计的数据,让推广者头疼不已。幸运的是,Xinstall作为国内专业的App全渠道统计服务…

EmguCV学习笔记 VB.Net 6.6 图像的矩

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【保姆级WebStorm安装!!!】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

记录|Form1中嵌套Form2时的频闪问题解决[不同于常见的三部曲]

目录 前言一、常见的解决方案二、自己创建渐变色组件GradientPanel三、最终效果展示更新时间 前言 参考文章: C#画图解决闪烁问题 [解决winform中重绘时控件闪烁的问题](panel1.GetType().GetProperty(“DoubleBuffered”,System.Reflection.BindingFlags.Instance …

试卷擦除,这几款软件擦得干干净净!

在现代教育中,电子化试卷已经成为一种趋势,然而随之而来的问题是如何有效地擦除试卷上的答案,以便进行反复使用试卷。为了解决这个问题,我们介绍了三款试卷答案清除方法,这些方法不仅简单易用,而且效果显著…

运维团队如何高效使用监控易

监控易作为一款功能强大的运维监控工具,能够为运维团队提供全面、实时的设备运行状态和性能指标。为了高效使用监控易,运维团队应遵循以下步骤和策略: 一、熟悉监控易界面与功能 深入了解监控易的仪表盘界面,包括设备运行状态、…

APP自动化测试思路整理,跟着步骤快速撸码...

前言 1、开发语言选择 通常用于自动化测试的编程语言有:Python、Java、Javascript、Ruby、C#、PHP等。 一般我们会选择自己熟悉的编程语言来编写自动化脚本,但对于编程基础基本为0的童鞋(或者专注于做自动化测试的童鞋)&#x…

ICT测试探针市场报告:前五大厂商占有大约26.0%的市场份额

ICT测试探针,即在线测试(ICT)探针,是专门用于电路板(特别是PCBA)电气测试的重要工具,通过这些探针接触PCB上的测试点,来检测电路板上元器件的连通性和电气性能,从而保证电…

视频超分辨率重建——AnimeSR网络测试教程(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

2021CCPC网络赛:G - Function HDU - 7106

题意 定义g(x)为x的各数位之和 求该方程: 在给定x范围内的最小值 思路: 一个x对应一个g(x),一个g(x)对应多个x 由于g(x)最多取到54,所以可以枚举所有的g(x)所以想到当取到g(x)的时候,只取能使原方程f(x)最小的那几个x 当枚举g(x)的时候,g(x)看作一个常数,此时方程…

干货分享:精选四大Win10录屏工具推荐!

无论你是制作教程视频、游戏实况分享还是日常办公中的演示记录,一款好的录屏软件都能让你事半功倍。Windows 10作为当下最流行的桌面操作系统之一,本文推荐几款优秀的win10录屏工具 福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 福昕录屏…