Handler消息机制学习总结(转)

Handler消息机制详解 转载请注明链接:http://blog.youkuaiyun.com/feather_wch/article/details/79263855 介绍Handler、Looper、MessageQueue、ThreadLocal和主线程ActivityThread等内容 Android的消息机制 版本:2018/2/6-1 Android的消息机制 消息机制概述 ThreadLocal 消息... 阅读详情

Handler的作用

在Android中使用Handler主要是因为,在主线程(UI线程)中不能进行耗时操作(网络下载之类的…),否则界面会卡死。而在子线程中不能进行UI更新,因为这对主线程来说是不安全的(多个子线程同时对UI进行更新…)。为了解决将耗时操作放到子线程中,同时UI更新是在主线程中。开发者提出了Handler消息机制。

Handler消息机制的原理

概念:
1.Handler:与不同线程的Looper进行沟通,可以将Message发送到MessageQueue,或者接受Looper从MessageQueue中获取的Message
2.Looper:一个线程可以产生一个Looper对象,由它来管理该线程的MessageQueue
3.MessageQueue(消息队列):用来存放线程放入的消息
4.Message:消息

1.Handler创建消息

每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能。Android消息机制中引入了消息池。Handler创建消息时首先查询消息池中是否有消息存在,如果有直接从消息池中取得,如果没有则重新初始化一个消息实例。使用消息池的好处是:消息不被使用时,并不作为垃圾回收,而是放入消息池,可供下次Handler创建消息时使用。消息池提高了消息对象的复用,减少系统垃圾回收的次数。消息的创建流程如图所示。
这里写图片描述

2.Handler发送消息

UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。使用ThreadLocal的目的是保证每一个线程只创建唯一一个Looper。之后其他Handler初始化的时候直接获取第一个Handler创建的Looper。Looper初始化的时候会创建一个消息队列MessageQueue。至此,主线程、消息循环、消息队列之间的关系是1:1:1。
Handler、Looper、MessageQueue的初始化流程如图所示:

这里写图片描述

Hander持有对UI主线程消息队列MessageQueue和消息循环Looper的引用,子线程可以通过Handler将消息发送到UI线程的消息队列MessageQueue中。

3.Handler处理消息

UI主线程通过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息从消息队列中取出。首先分析消息,通过消息的参数判断该消息对应的Handler,然后将消息分发到指定的Handler进行处理。
子线程通过Handler、Looper与UI主线程通信的流程如图所示。

这里写图片描述

Android Handler 消息机制 每一个搞 Android 的对 Handler 应该都不陌生,网上大神的文章也是数不尽的。这篇文章是个人在学习 Handler 过程中的一些疑问的记录。 1. 什么是 Handler,有什么作用 Handler 首先是一个 java 类,定义在/frameworks/base/core/java/android/os/Handler.java。但一般提到 Handler 并不专指它自身,常用来代指 Android 中的消息处理机制,或者说线程间通信的工具,典型应用就是在子线程中更新 UI 线程。那么,很显然 阅读详情

相关推荐

Android Handler消息机制详解

Android应用程序是通过消息驱动实现的,因此,Handler机制对于Android应用程序的运行极其重要。 本文详细的介绍了Handler、Looper、MessageQueue、Message、ThreadLocal,内容较长,可以分部分进行学习。文章未详尽之处,欢迎交流,描述有误之处,欢迎指正。 点关注,不迷路;点收藏,你更强;点点赞,我心欢。

u011532067的博客 1192

handler消息机制总结

handler消息机制总结 什么是handler消息机制 handler消息机制:简单的说,其实是android系统为了线程间通讯而设计的一套线程间通讯框架。 对android有一定了解的人员都知道,我们android里只能在主线程中更新UI,那我们子线程中可以更新吗?答案肯定是可以,我们只能通过handler发送消息通知主线程更新UI。那有人可能就会问为什么要这样设计呢?其实这样设计google开发工程师也是考虑到性能以及维护复杂度才这样设计的,如果我们每个线程都能更新UI那势必会增加系统管理UI的复杂度

guojingbu的博客 293

Handler消息机制

文章目录(一) Handler消息机制简介组成消息类型(二) Handler的使用使用方式一使用方式二使用方式三使用方式四使用方式五(三) 消息发送时序图消息机制运行准备说明。发送消息Handler#sendMessage(...)说明发送消息Hnalder#sendMessageDelayed(msg, delayMillis)说明发送消息Handler#post(...)说明IdleHandler说明消息屏障说明其他消息发送说明(四) 使用Handler的注意事项(五) QA(六) 参考

xiaomin1992的专栏 1274

研究Handler源码心得

1:初始化,子线程和主线程通讯流程分析 1:Looper的初始化有两种,一种是prepareMainLooper()和prepare(),prePareMainLooper是在主线程中创建的Looper,是在ActivityThread的main方法中初始化的 public static void main(String[] args) { ...省略一些代码 Loo...

yanjiabin159357的博客 182

Handler 消息处理机制总结

和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、Handler 简介二、Handler 消息处理机制原理三、Handler 机制处理的4个关键对象四、 Handler常用方法五、子线程更新UI 异常处理六、主线程给子线程发送消息的方法七、主线程发送消息给子线程的例子八、子线程给主线程发送消息的方法九、 主、子 线程 互发消息方法十、子线程方法中调用主...

程序员Android 917

快速配置ORCAD导出智能PDF原理图

在OrCAD 中导出类似Altium Designer的智能PDF(即交互式PDF);

QingNing3028的博客 3958

Handler消息传送机制总结

Handler类的主要作用: 1.在子线程中发送数据。 2.在主线程中接收数据,处理数据。 这个过程和使用的方法都是我们要理解的

wenzhi的博客 1万+

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

Handler消息机制小结

最近复习了下Handler消息机制,跟了一下源码,准备做个小总结作为自身知识归纳,也可以跟博友们一起进行讨论讨论。 一、Handler是什么?它是一种消息机制,是进行线程间通信的。实际上Android的消息机制就是Handler的运行机制。 二、Handler的组成:handler、looper,masseage,messagequene 运行原理:handler通过发消息进入到messag...

wuhongji2017的博客 299

基于Cadence IC617的共源级放大器设计:从直流到交流的virtuoso仿真实践

本文详细介绍了使用Cadence IC617的Virtuoso平台进行共源级放大器设计的完整仿真流程。从电路图绘制、直流工作点分析,到负载电阻RD的参数扫描及其对增益和带宽的影响,再到交流小信号频率响应仿真,提供了从理论到实践的全面指导,帮助初学者掌握模拟集成电路设计的核心仿真技能。

jj890的博客 480

医学超声影像研究——从拒稿到录用:我的UMB投稿实战复盘

本文分享了作者将一篇关于超声影像中肿瘤传统分类方法的研究论文,从被其他期刊拒稿到最终被《Ultrasound in Medicine & Biology》录用的完整实战经验。文章详细复盘了心态调整、精准选刊、针对UMB期刊的稿件精修、投稿系统操作细节以及与审稿人有效沟通回复的全过程,为医学影像领域的科研工作者提供了宝贵的投稿策略与实操指南。

stem5的博客 493

Handler消息机制原理详解及使用~

Handler详解(一) 2018.04.04 16:58 5030浏览 1、handler是什么? 2、为什么要用handler? 3、handler怎么用呢? 4、android 为什么要设计只能通过handler机制更新UI? 5、handler的原理是什么? 6、使用handler时候遇到的问题? 7、如何实现一个与线程相关的Handler? 8、HandlerThrea...

程序人生~ 2050

WebVTT中的文本轨道(Text Tracks,TT)到底是什么鬼?

WebVTT,全称是The Web Video Text Tracks Format,意思是网络视频文本轨道格式。那么到底什么是文本轨道(Text Tracks)呢?这篇文章希望一探究竟。

码农1479的博客 1987

handler+message【消息机制】

handler 主要是解决同一个页面的耗时操作。在看方法之前看一下Android中消息机制耗时操作一般不在主线程里面进行,因为可能会造成堵塞,加载慢,程序崩溃等。在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法。解决主线程无法完成耗时的操作有很多。那么快来看看怎么解决的吧。...

qq_46906413的博客 4696

2024年最新双摄像头的实时视频拼接及目标跟踪(一)_监控视频拼接实时(1),网络相关+C C++三方库的源码分析+数据结构与算法

opencv中采用了SURF,ORB进行特征点提取,如果装的是opencv2.0版本,则可以直接用SURF,如果是3.0版本,则需要下载相应的contrib库进行安装。原理不赘述,给出其实验结果对比和分析,原始图像1SURF特征点提取网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加戳这里获取一个人可以走的很快,但一群人才能走的更远!

m0_51437227的博客 937

瑞芯微RV1109平台GT911触摸屏驱动调试记录1

很明显这里可以看到系统已经配置了i2c-0、i2c-1、i2c-3、i2c-4、i2c-5,当开机的时候系统已经将相应的I2C节点注册成功了,说明I2C部分是没有问题的。

bingdund的博客 298

【Android】Handler消息机制

Android消息机制学习分享

m0_74448051的博客 1651

手把手教你学Simulink--进阶电机控制场景实例:基于Simulink的直流电机双闭环调速系统抗负载扰动仿真

摘要:本文基于Simulink平台构建直流电机双闭环调速系统,重点研究其在工业传送带场景下的抗负载扰动性能。系统采用转速外环(稳速)和电流内环(限流)的嵌套结构,通过工程法整定PI参数,实现了转速跌落<10%、恢复时间<0.5s的优异抗扰性能。仿真结果表明,相比单闭环系统,双闭环控制使转速跌落率降低47%,恢复时间缩短75%。文中详细介绍了数学模型建立、Simulink模块实现及参数优化方法,并提供了完整代码和模型文件,为电机控制系统设计提供实用参考。

MHD0815的博客 181

Handler 消息机制

Android的消息机制主要是指Handler的运行机制,以及Handler所附带的和Looper的工作过程。HandlerLooper这三者实际上是一个整体,只不过在开发过程中比较多地接触Handler而已。Handler的主要作用是将一个任务切换到某个指定的线程中去执行。

zengkaiqiang562的博客 1884

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Handler消息机制-Handler

Handler 消息处理机制主要由 Handler、Looper、MessageQueue 和 Message 四部分组成。Handler作用:用于发送消息和处理消息。发送消息到 MessageQueue。处理从 Looper 分发的消息。特点:每个 Handler 绑定到一个 Looper,从而绑定到一个线程。可以发送 Message 或 Runnable。Message作用:消息的载体,封装了需要处理的任务或数据。通过 what 字段标识消息类型。通过 obj 字段传递数据。

只想搞钱 1719

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android Handler消息处理机制

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

轻口味的专栏 3409

STM32F407中文手册

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

【Android 消息机制】Handler

Android专题学习-Handler总结

studyForMokey的博客 985

Android之handler消息处理机制详解

介绍android中常见的handler消息处理机制,分析源码

qq_43800449的博客 4189

Handler消息机制深入学习

Handler是Android消息机制中非常重要的一块,Android系统源码许多地方使用到了Handler,现在项目中许多框架底层也是通过Handler来封装的,而且面试也是必问的一块,之前面试吃过几次亏,因为了解得不够深入,所以作为Android开发程序员来说,这块是必须要掌握的,不仅是使用,而且包括源码,底层实现流程。 之前就想写Handler的源码解析文章了,但是一直没有动手,因为里面有些...

夏的专栏 564
上一篇: Android系统的启动流程(转载)
下一篇: AsyncTask
Earth_Programer
博客等级 码龄11年 18粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值