Android Handler机制

Handler机制(二)——Message池和其他小问题(待更新) Message创建的时候除了new Message()之外,还有两种方式首先看第一个,是通过Handler对象来调用获取Message对象。可以看到obtainMessage()方法有多个重载,除了空参外,还可以传入一些参数,这些参数都是初始化Message对象使用的,是Message类中的属性。无一例外,他们都是调用的Message中的obtain方法,只是根据传入参数个数的不同,调用的是obtain方法的多个重载方法。 阅读详情

最近没事干又看了看Handler的机制,做一个大概的阐述。

对于初学者来说会用才是他们的当务之急,但是你要拜托菜鸟的帽子就必须深挖底层的东西。

先看看我们一般是咋用的:

private Thread mThread;
private Handler mHandler = new Handler(){
		
		public void handleMessage(android.os.Message msg) {
			
			switch (msg.what) {
			case 1:
				// do your thing;
				break;

			default:
				break;
			}
			
		};
		
	};
	
	public void startTask(){
		
		new Thread(){
			
			@Override
			public void run() {
				
				Message msg = mHandler.obtainMessage();
				msg.what = 1;
				msg.arg1 = 2;
				mHandler.sendMessage(msg);
			}http://blog.youkuaiyun.com/jackchen95/article/details/13631761
			
		}.start();
	}

这这几行的代码,有很牛逼的机制。

看看源码才知道是这样的:

首先从表面上理解这样几个概念:Message(消息)   MessageQueue(消息队列)  Looper(循环)  Handler

他们是怎样协调工作的呢。

大概是这样的,在主线程中有且只有一个Looper循环,Looper中维护着一个MessageQueue(消息队列),Handler从消息池中得到一个Message对象,Handler将消息发送出去之后MessageQueue就会接收到这个Message对象,Looper发现自己的消息队列中有消息的话就会执行:

看最后一行,这是一个死循环,msg.targert是Handler的实例,并且这个Handler就是mHandler,也就是mHandler.obtainMessage();

这个Handler,你使用mHandler.obtainMessage()得到的消息,消息在被处理的时候还是mHandler,应为Message中有一个成员变量

Handler target。

大致就是这样:

http://blog.youkuaiyun.com/jackchen95/article/details/13631761






http://blog.youkuaiyun.com/jackchen95/article/details/13631761(参考)


[Android进阶】Handler机制原理解析_android handler的机制和原理 按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。 阅读详情

相关推荐

Android Handler机制

Android Handler 机制是一种用于在 Android 应用中处理多线程和异步操作的机制。

Junes inh 的技术专栏 1585

handler的obtainMessage

obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new new需要重新申请,效率低,obtianmessage可以循环利用; Message和obtainMessage()的用法区别: Message msg = handler.obtainMessage();      msg.arg1 = i;      msg.sendToTarget();    

qie7892683的专栏 917

MATLAB 论文复现——面向紧急需求响应的规模化灵活资源负荷管理快速决策方法

其次,对灵活资源参与EDR的功率分配模型进行了建模,并提出了基于分层分布式共识算法的快速决策方法,对功率分配模型进行快速求解,以满足EDR实时性的需求,在保证较高精度的前提下提高了决策速度。[1]孔祥玉,杨至端,孙裕策,等.面向紧急需求响应的规模化灵活资源负荷管理快速决策方法[J/OL].电力系统自动化,1-13[2024-07-29].http://kns.cnki.net/kcms/detail/32.1180.TP.20240709.1843.002.html.关键词: 规模化灵活资源;

sjr1478的博客 374

Handler发送的消息通过obtain获取

话说在工作中第一次接触android 的Handler 的时候,不知道怎么去关注性能。这样使用并不是一定不允许,但是目前任何产品对于性能的要求越来越高,任何内存、调度的优化都是推荐的、可取的。

私房菜 2156

【机器学习入门】1.4 吃透这些基本术语,才算真正入门

本文通过"挑西瓜"的生活案例,形象解释了机器学习的基本术语。样本对应单个西瓜,特征如色泽、根蒂等是观察维度,特征值是其具体表现,标签是西瓜的好坏判断。数据集是样本集合,特征向量是样本的数学表达,特征空间是所有可能的样本组合。文章强调数据集需划分为训练集、验证集和测试集,以评估模型的泛化能力。最后整理了术语对照表,并解答了常见问题。这些基础概念是理解机器学习的关键,建议读者重点掌握。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 654

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

handler.obtainMessage()理解

在handler.obtainMessage()的参数是这样写的:Message android.os.Handler.obtainMessage(int what, int arg1, int arg2, Object obj)public final Message obtainMessage (int what, int arg1, int arg2, Object obj) Since: ...

weixin_34228617的博客 501

10、GPU发展历程:从光线追踪到网格着色器的技术革新

本文回顾了GPU的发展历程,重点探讨了从光线追踪到网格着色器的技术革新。涵盖了DirectX 12时代(2015-2020)光线追踪与AI结合的突破,包括NVIDIA的Volta架构、DLSS技术原理及可变速率着色的应用。随后介绍了DirectX 12 Ultimate时代(2020)网格着色器的引入,分析了其计算模型、细粒度控制能力及跨平台优势。最后总结了着色器的演变及GPU在多个领域的广泛应用。

ol789012345的博客 183

Android studio new Message与mHandler.obtainMessage的区别

和的主要区别在于它们的内存管理策略。总是创建一个新的对象,而则尝试从消息池中获取一个可重用的对象。在大多数情况下,使用是一个更好的选择,因为它有助于减少内存分配和GC压力。

谁呛我名字的博客 891

YOLOv11改进 | 特殊场景改进篇 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的改进机制是2024.3月份最新改进,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2013

基于LLaMA-action模型的文档摘要任务微调

文档摘要是指从长文档中提取关键信息,生成简短而准确的总结。抽取式摘要:从原文中直接抽取关键句子或短语组成摘要。生成式摘要:通过生成新的句子来表达原文的核心内容。混合式摘要:结合抽取式和生成式方法,既保留原文的关键句子,又生成新的内容。新闻网站:自动生成新闻摘要,帮助用户快速了解新闻要点。社交媒体:为用户提供新闻摘要,便于分享和传播。学术搜索引擎:为用户提供学术文献的摘要,帮助用户快速筛选相关文献。学术写作辅助:帮助研究人员快速生成文献综述部分。企业内部文档管理:自动生成文档摘要,便于员工快速了解文档内容。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1431

安卓的Handler机制

Android Handler机制解析 Handler机制是Android实现线程间通信的核心框架,主要由四个关键组件构成: Handler:消息发送和处理的桥梁,负责发送消息(sendMessage)和处理消息(handleMessage) Message:消息数据结构,包含what、obj、arg1/arg2等字段 MessageQueue:消息队列,负责消息的存储和管理 Looper:消息循环,从队列中取出消息并分发 每个线程只能拥有一个Looper,通过ThreadLocal保证线程隔离。使用Han

weixin_44078411的博客 1169

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

本文介绍了WinForm开发中OpenFileDialog控件的关键属性及其应用。OpenFileDialog是.NET Framework提供的文件对话框控件,主要用于选择、打开文件操作。文章详细讲解了11个核心属性:AddExtension(自动补全扩展名)、AutoUpgradeEnabled(外观升级)、CheckFileExists/CheckPathExists(文件/路径存在验证)、DefaultExt(默认扩展名)、DereferenceLinks(解析快捷方式)、FileName/File

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1534

Android :安卓学习笔记之 Handler机制 的简单理解和使用

Android Handler机制的简单理解和使用1、Handler使用引出2、背景和定义3、作用4、相关概念5、工作流程5.1、对应关系6、基本使用7、参考 1、Handler使用引出 现在作为客户,有这样一个需求,当打开Activity界面时,开始倒计时,倒计时结束后跳转新的界面(思维活跃的朋友可能立马想到如果打开后自动倒计时,就类似于各个APP的欢迎闪屏页面),如下图: 可能觉得直接开启一个包含倒序循环的子线程就ok了,具体实现如下: activity_main <?xml version="

JMW1407的博客 6775

基于Qt的工业组态软件开发:图形绘制与TCP通讯实现

在数据接收时,通过 readyRead 信号触发解析函数,校验数据包完整性后提取有效数据,并更新对应图形元素的状态,例如根据温度值改变矩形的填充色,实现设备状态可视化。测试阶段,我们将软件部署到Windows工控机,连接PLC设备进行通讯测试,结果表明图形元素响应及时,TCP数据传输稳定,满足工业现场的基本需求。综上所述,基于Qt的组态软件开发,核心在于利用 QGraphicsView 框架实现图形元素的灵活绘制与管理,结合 QTcpSocket 完成工业数据的可靠交互。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 272

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

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

安卓handler机制

Handler Android中 ui的更新需要在主线程中进行,一些耗时的操作我们会放在后台线程中进行,而将执行结果在ui线程中进行。 安卓在设计时就封装了一套消息创建,传递,处理机制,如果不遵循这样的机制,就无法更新ui信息,并抛出异常: 不能在非UI线程中去更新UI。 因此就引入了hanlder机制 特点 a. 允许你去发送并处理一条runnable对象和messageQueue相关联的信息。 b. 每一个handler的实例都与一个单独的线程 c. 当创建一个新的处理程序时,它将绑定到正在创建线程的线

weixin_47285644的博客 1109

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【安卓学习笔记】Android Handler 消息机制探究

一、概述 1.android消息机制的含义: Android消息机制,其实指的就是 Handler 的运行机制 而 Handler 要正常运作,又需要底层的 MessageQueue , Looper , ThreadLocal 共同配合 因此所谓的消息机制,其实主要讲的就是 Handler ,MessageQueue ,Looper ,ThreadLocal 四者的关系 2.概述Handler工作流程: 首先是构造 Handler ,这时候会通过 ThreadLocal 找到当前线程的 Looper

tulensa的博客 1499

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 的handler机制,安卓 handler机制的loop()为什么不会ANR?

本帖最后由 javantiger93000 于 2016-11-28 14:06 编辑//这是我做的主活动代码,由于Android中不允许在子线程中进行UI操作,所以是基于Android的异步消息处理机制,实现了UI在子线程中的更新操作//MainActivity.java文件package com.example.androidthreadtest;import android.app.Acti...

weixin_35795675的博客 380

Android的Handler机制原理

1.Handler是什么? 在Android中表示一种消息处理机制或者叫消息处理方法,用来循环处理应用程序主线程各种消息,比如UI的更新,按键、触摸消息事件等。 2.为什么Android要用Handler机制 Android应用程序启动时,系统会创建一个主线程,负责与UI组件(widget、view)进行交互,比如控制UI界面界面显示、更新等;分发事件给UI界面处理,比如按键事件

码农的小世界博客 890

Android中handler机制

核心目的:解决多线程并发和线程切换的问题。在 Android 中,主线程(UI 线程)负责处理用户交互和UI更新,绝对不允许在主线程中进行耗时操作(如网络请求、数据库读写),否则会引发 ANR。同时,Android 的 UI 工具包不是线程安全的,不允许在子线程中直接更新 UI。在子线程中执行耗时任务,然后将结果发送回主线程进行UI更新。Handler 就是这个机制的基石。Handler 机制的四大组件:Message: 需要传递的消息,可以携带数据和标识。: 一个按时间排序的优先级队列。

qq_45906596的博客 1043

android handler面试,安卓Handler机制学习笔记附面试问题

基础知识Handler 机制相关的概念包括 Handler、Message 、Message Queue、Looper具体如下图相关的概念核心方法接下来我们将四个相关的类一个个按着源码来看一遍MessageMessage是信息传递的载体里面没有太多逻辑就是包括一些信息传递机制里面必须要用到的属性主要看其构造函数的源码public static Message obtain() {synchroni...

weixin_34835470的博客 166

安卓Handler机制

Handler机制运用在安卓线程之间的消息传递。Handler之所以能够运行,得力于与Handler紧密相联的Looper,每一个线程都只能有一个Looper,一个Looper就可以看成一个事件执行者,Handler决定对事件做什么具体操作,所以一般继承了Handler就要重写其中的handleMessage方法,那么事件从哪里来呢?从消息队列MessageQueue中得来。 Handler的使用...

whoami_I的博客 1550

【Android 消息机制】Handler

Android专题学习-Handler总结

studyForMokey的博客 983

Android Handler消息处理机制

消息处理机制本质:一个线程开启循环模式持续监听并依次处理其他线程给它发的消息。简单的说:一个线程开启一个无限循环模式,不断遍历自己的消息列表,如果有消息就挨个拿出来做处理,如果列表没消息,自己就堵塞(相当于wait,让出cpu资源给其他线程),其他线程如果想让该线程做什么事,就往该线程的消息队列插入消息,该线程会不断从队列里拿出消息做处理。

轻口味的专栏 3402

Android的Handler机制原理详解

在实际开发中,三种方法的使用都可行,具体用哪种方法,需结合你的实际情况及个人喜好。另外,在实际使用中往往将 Handler 写成静态内部类,这时需要注意防止内存泄露!(The handler class should be static or leaks might occur),具体代码见上方!如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

大模型训练 2934
上一篇: 当你感觉自己不知道干啥的时候就看看基础吧
下一篇: 在demo中提升自己
SoulOfAndroid
博客等级 码龄12年 8粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值