handler机制的原理
andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
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主线程通信的流程如图所示。
handler机制的原理相关推荐
- Android 为什么要有handler机制?handler机制的原理
为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...
- handler机制的原理_5分钟了解Handler错误使用场景
码个蛋(codeegg)第 821 次推文 作者:刁儿郎当 博客:https://www.jianshu.com/p/43e21be8d849 码妞看世界 小燕子叶 写在前面 Handler的相关博客 ...
- handler机制的原理_Handler机制竟然可以这样解释,我惊呆了!
Handler的相关博客太多了,随便一搜都一大把,但是基本都是上来就贴源码,讲姿势,短时间不太好弄明白整体的关系,和流程,本文就以生活点餐的例子再结合源码原理进行解析.希望对你有一点帮助. 来,咱们进 ...
- [转]Android中handler机制的原理
Andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- Handler机制原理解析(二)prepare,loop,post
Handler机制原理解析(二)prepare,loop,post 上一篇已经介绍了Handler机制的原理,如果不熟悉可以看Handler机制原理解析(一).这一篇,介绍下Handler周边的知识点 ...
- 浅谈Android中的Handler机制
Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息机制.为了避免ANR,我们通常会把一些耗时操作(比如:网络请求.I/O操作.复杂计算等)放到子线程中去执行,而当子线程需 ...
- Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略
Android Handler:这是一份 全面.详细的Handler机制 学习攻略 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将献上一份 全面.详细的Handl ...
- android handler的机制和原理_一文搞懂handler:彻底明白Android消息机制的原理及源码
提起Android消息机制,想必都不陌生.其中包含三个部分:Handler,MessageQueue以及Looper,三者共同协作,完成消息机制的运行.本篇文章将由浅入深解析Android消息机制的运 ...
- android handler的机制和原理_Android完整知识体系路线(菜鸟-资深-大牛必进之路)
前言 移动研发火热不停,越来越多人开始学习Android 开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系 ...
最新文章
- mysql xid原理_MySQL数据库分布式事务XA实现原理分析
- 对光照、阴影和反光具有鲁棒性的变化检测算法及实现
- Android 11 限制反射,如何破解?
- Phonegap + JqueryMobile常见问题
- excel删除重复数据保留一条_VBA利用字典删除重复行,保留唯一值
- 深度学习之卷积神经网络(12)深度残差网络
- Spring DAO之JDBC
- java 根据类名示例化类_如何使用示例从Java中的类路径加载资源
- 微信小程序需要https后台的创业机会思考
- git删除分支_程序员必须要掌握的 Git 使用技巧
- java class教程_深入理解Java Class文件格式(七)
- [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块
- redis类型 tp5_tp5配置使用redis笔记!
- 万年历节气java代码_[分享]时钟万年历代码,供大家学习GUI
- Elasticsearch5.2.1集群搭建,动态加入节点,并添加监控诊断插件
- cachecloud部署和创建机器
- app store无法下载、安装软件,一直在转圈的一个解决方法
- mysql 查询字母集合_使用MySQL查询查找所有以字母“ a”,“ b”或“ c”开头的名称?...
- java程序员培训学习需要多长时间
- NLP实战:财经新闻热点发现
热门文章
- python代码变成运行程序_用Python脚本转换成windows的可执行程序
- python 类方法装饰器_python类装饰器即__call__方法
- conda init 关闭和重启shell_TP5实战源码 通过shell建立PHP守护程序
- linux知识点记录二
- 德云斗笑社何九华为什么没参加_江西省会为什么是南昌?
- 关于类与对象操作的细节与注意事项(c++细节篇三)
- 谷歌io大会 android p,谷歌I/O大会发布全新电视系统 Android P让电视变的更加智能...
- 天翼云从业认证(4.1)上云迁移实战
- 建信金融科技春季全国笔试卷B编程题
- 中国移动雄安研究院 2020校园招聘笔试JAVA方向(二)