Handler、Looper、Message之间关系

Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系 这样不同的线程访问同一个 ThreadLocal 时,获取到的值也就是各个线程存储时对应的值了。size 代表表中的存储数目;在Handler的handleMessage()方法中,我们可以重写自定义的消息处理逻辑,这个方法最终会由Looper.loop()中的msg.target.dispatchMessage(msg)回调执行。在构造Handler实例时,会获取当前线程的Looper,并将Handler的MessageQueue与Looper内部的MessageQueue建立关联。 阅读详情
  • Handler、Looper(轮循器)、MessageQueue(消息队列)、Message(消息)工作原理----面试问题

与Handler一起工作的几个组件:

  1. Message:Handler接收和处理的消息对象。
  2. MessageQueue:消息队列,他采用先进先出的方式来管理Message。Handler发送消息时先把消息发送到消息队列中。
  3. Looper:每个线程最多拥有一个Looper。他的Loop方法负责读取MessageQueue队列中的消息,读到信息之后就把信息交给发送该消息的Handler进行处理。程序在创建Looper对象的时候,会自动在Looper的构造器中自动创建一个MessageQueue队列对象。

 

注意:

  1. Handler发送的消息时先放入MessageQueue,所以handler要正常工作,必须当前线程先有MessageQueue
  2. 而MessageQueue是由Looper管理的,所以换句话说,Handler要正常工作必须先有Looper。
  3. 为了保证线程中有Looper,分两种情况。

A:在主线程中系统默认已经初始化了一个Looper对象,并且已经loop(),所以在主线程中可以直接创建Handler对象进行使用。

B:程序员自己创建的子线程,必须手动创建一个Looper对象,并启动它。Looper.prepare();  //创建Looper对象,同时初始化一个消息队列

Looper.loop();//启动Looper。让Looper开始工作:去消息队列中取消息,然后交给当前线程中的Handler来处理。里面是个死循环

 

总结:

  1. 主线程中使用Handler直接创建即可以使用。
  2. 子线程中使用Handler的步骤:

a:调用Loop.prepare(); 

b:创建Handler对象.

c:调用Looper.loop();

注意:在线程中调用过Looper.loop()之后,后面不能再写代码,因为loop()内部是个死循环,后面的写的代码无法执行到。

  • 线程间通信的实现步骤:

1.在主线程中定义Handler的子类

2.重写Handler类的handleMessage()方法

3.用该子类定义全局的Handler对象,以便子线程使用

4.子线程获得handler对象用该对象的sendMessage()方法发送消息

Android单线程模型中Message、Handler、Message Queue、Looper之间的关系---附实例源码 四者之间的关系: Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. 简单定义: 1、Message Queue(消息队列): 用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列. 阅读详情

相关推荐

使用3sigma原则去除数据表中的极端值

本文使用3sigma解决数据表中出现的极端值问题,其中包括基本原理、使用原则(检验方法)、代码展示这3个部分

qq_51397866的博客 4380

Looper、Message和Handler的关系

Handler、Loop和Message 的关系 Looper中有一个Message队列,里面存储的是一个个待处理的Message;Message中有一个Handler,这个Handler是用来处理Message的。 Message Meaasge是Handler接收和处理的消息对象;MessageQueue是消息队列,采用先进先出的方式来管理Message。 Message类

志在四方 998

MySQL 分库分表及其平滑扩容方案

MyCAT不仅仅可以用作读写分离,以及分表分库、容灾管理,而且可以用于多租户应用开发、云平台基础设施,让你的架构具备很强的适应性和灵活性。分表对于一张多行(记录)多列(字段)的二维数据表,又分两种情形(1)垂直分表竖向切分,不同分表存储不同的字段,可以把不常用或者大容量、或者不同业务的字段拆分出去;扩容前每个节点的数据,有一半要迁移至一个新增节点中,对应关系比较简单。此时,四个节点的数据都已完整,只是有冗余(多存了和自己配对的节点的那部分数据),择机清除即可(过后随时进行,不影响业务)。...

m0_71777195的博客 1929

Android Looper和Handler

Android中的Looper , Handler , Message Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。 Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessag

Hknock的专栏 1577

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9198

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1216

Handler 知识点梳理:Handler、Looper 以及 Message 三者之间的关系

Handler、Looper以及Message之间的关系,概括性来说,Looper负责的是创建一个MessageQueue对象,然后进入到一个无限循环体中不断取出消息,而这些消息都是由一个或者多个Handler进行创建处理Messagequeue 的数据结构是什么?基础数据结构中“先进先出”的一种数据结构在 Android 中使用消息机制,我们首先想到的就是 Handler;没错,Handler是 Android 消息机制的上层接口;...

m0_62167422的博客 2366

相控阵雷达“相控”原理---多张动画示意图完美解释

很容易就能发现,相控阵雷达的天线由无数个小单元天线组成,这些小单元天线叫做“阵元”,对于有源相控阵雷达来说,每一个阵元都是独立控制的,它们既能独立发射雷达波,也能接收雷达波的回波信号。相控阵雷达可以在1秒内关机,1秒内开机,好处是,当军舰遇到依靠雷达信号进行引导的“反雷达导弹”时,可以迅速地把朝向来袭导弹方向的雷达关机,同时,其他方向的雷达保持开启。在过去,军舰上安装有不同种类的雷达,体积庞大、重不说,另一个麻烦是干扰,常常是,一种雷达工作时,另一种雷达就会受到干扰,严重的甚至不能同时工作。

muyangjun的专栏 1万+

JAVA :Handler 、 Looper 、Message的关系

Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环。若消息队列为空,线程则会阻塞等待。 Handler 、 Looper 、Message的关系其实是:Looper负责的就是创建一个MessageQueue,然后进入一个无限循环体不断从该MessageQueue中读取消息,而消息的创建者就是...

weixin_40721097的博客 432

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 211

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

934

Message、Handler、Message Queue、Looper之间的关系。

Main Thread & UI Thread 当程序启动的时候Android会自动创建一个进程和一个线程,这个线程负责界面更新,收集系统事件和用户的操作事件等并分配给对应的组件,所以这个线程非常重要 被称为主线程,因为所的和UI有关的操作都是在这个线程当中进行的所以也被称作UI线程。所以说默认情况下主线程和UI线程指的是同一个线程。For instance, when the user touc

xiao_彩笔的博客 310

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4042

Handler,Looper ,Message和MessageQueue 之间的关系

Looper(先分析这个是因为能够引出四者的关系)在Looper中,维持一个Thread对象以及MessageQueue,通过Looper的构造函数我们可以知道:private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed);//传入的参数代表这个Queue是否能够被退出 mThread = T

Victor_Zhang_SH的博客 573

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Handler、Message和Looper之间的关系

一、研究背景         在学习Android的多线程编程中,发现Android中规定UI的更新只能在主线程中进行,在子线程中是禁止的,但是主线程又不能进行耗时操作。为了解决既能更新UI又能进行耗时操作的需求,从而出现了消息机制、AsyncTask异步任务这两种方式。 二、Android的消息机制         在Android的消息机制中会涉及到Message类、Handler类、L...

nxc_boy的博客 1378

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

描述Handler,Looper,MessageQueue,Message之间的关系

安卓开发中所需掌握的知识点之一,自行总结点

Dota_wy的博客 1312

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Handler、Message、Looper三者之间的关系

##子线程不能修改UI界面 android.os.NetworkOnMainThreadException:网络在主线程上的异常; 在主线程上有访问网络的操作。 在Android4.0之后,google强制要求在主线程(UI线程)中不能有访问网络的操作,这样就避免在主线程中因为访问网络时间比较长而导致界面卡死等现象的发生。 Only the original thread t

♛ 走心。的专栏 878

Handler 、 Looper 、Message之间的关系

很多人面试肯定都被问到过,请问Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论。 1、 概述 Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。那么什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一个无限的循环体之中,每循

wsh的专栏 273

Thread,Looper,Handler,Message,MessageQueue之间的关系

多线程与异步 Main Thread & UI Thread 当程序启动的时候Android会自动创建一个进程和一个线程,这个线程负责界面更新,收集系统事件和用户的操作事件等并分配给对应的组件,所以这个线程非常重要 被称为主线程,因为所的和UI有关的操作都是在这个线程当中进行的所以也被称作UI线程。所以说默认情况下主线程和UI线程指的是同一个线程。For instance, when th

i_lovefish的专栏 865

单线程模型中Message、Handler、Message Queue、Looper之间的关系

单线程模型中Message、Handler、Message Queue、Looper之间的关系。 答:简单的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. Message Queue(消息队列):用来存放通过Handler发布的消息,通常附属于某一个创建它

炫_愛羊的专栏 7485

子线程新建Handler为什么会报错?——浅谈Handler,Looper,Message之间的关系

引言:很多人都知道不能再在子线程new一个Handler,android会报错,至于为什么会报错,并没有作深入的研究,今天一起来研究一下,顺手学习下android异步消息处理机制的问题。 在子线程中new 一个Handler为什么会出错?首先直接在子线程新建一个Handler? new Thread(new Runnable() { @Override pu

u012516445的博客 637

android的handler、looper、Message之间的关系

handler:绑定到一个线程上,一个线程可以有多个handler looper:线程跟looper是一一对应的,所以looper不能被调用两次否则会抛出异常 messge:handler利用message来携带消息 messagQueue:用来状态message,一个looper对应一...

259

Handler 机制学习之Handler、Looper、MessageQueue、Message之间的关系

先说说Looper。 Looper是用来管理一个线程的消息循环的,一般自己创建的线程,默认是没有Looper的。

hanhan1016的专栏 415

Handler,Looper,MessageQueue, Message 之间得关系

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

u012108336的博客 539

Handler由浅入深(二)--Handler的实现原理以及Looper、Handler、Message三者之间的关系

1、前言上一篇介绍了Handler的几种基本使用方法,本篇将介绍一下Handler的实现原理,这也是面试经常会被问到的问题,其实我们只要搞清楚Looper、Handler、Message三者之间的关系,自然就明白了Handler的实现原理。

LIUW的博客 468

学习Handler,Message,MessageQueue,Thread,Looper之间的关系

Handler类介绍 位于android.os.Handler包 介绍: Handler允许你发送和处理消息Message和于线程的消息队列管线的Runnable对象。每个Handler实例于一个线程和此线程的消息队列关联。当你创建一个新的Handler时,它必然

hxltech的专栏 595
上一篇: equals() 和 ==的区别
下一篇: Notification的使用详情
Joan_Vivian
博客等级 码龄9年 9粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值