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机制的原理相关推荐

  1. Android 为什么要有handler机制?handler机制的原理

    为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...

  2. handler机制的原理_5分钟了解Handler错误使用场景

    码个蛋(codeegg)第 821 次推文 作者:刁儿郎当 博客:https://www.jianshu.com/p/43e21be8d849 码妞看世界 小燕子叶 写在前面 Handler的相关博客 ...

  3. handler机制的原理_Handler机制竟然可以这样解释,我惊呆了!

    Handler的相关博客太多了,随便一搜都一大把,但是基本都是上来就贴源码,讲姿势,短时间不太好弄明白整体的关系,和流程,本文就以生活点餐的例子再结合源码原理进行解析.希望对你有一点帮助. 来,咱们进 ...

  4. [转]Android中handler机制的原理

    Andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...

  5. Handler机制原理解析(二)prepare,loop,post

    Handler机制原理解析(二)prepare,loop,post 上一篇已经介绍了Handler机制的原理,如果不熟悉可以看Handler机制原理解析(一).这一篇,介绍下Handler周边的知识点 ...

  6. 浅谈Android中的Handler机制

    Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息机制.为了避免ANR,我们通常会把一些耗时操作(比如:网络请求.I/O操作.复杂计算等)放到子线程中去执行,而当子线程需 ...

  7. Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略

    Android Handler:这是一份 全面.详细的Handler机制 学习攻略 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将献上一份 全面.详细的Handl ...

  8. android handler的机制和原理_一文搞懂handler:彻底明白Android消息机制的原理及源码

    提起Android消息机制,想必都不陌生.其中包含三个部分:Handler,MessageQueue以及Looper,三者共同协作,完成消息机制的运行.本篇文章将由浅入深解析Android消息机制的运 ...

  9. android handler的机制和原理_Android完整知识体系路线(菜鸟-资深-大牛必进之路)

    前言 移动研发火热不停,越来越多人开始学习Android 开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系 ...

最新文章

  1. mysql xid原理_MySQL数据库分布式事务XA实现原理分析
  2. 对光照、阴影和反光具有鲁棒性的变化检测算法及实现
  3. Android 11 限制反射,如何破解?
  4. Phonegap + JqueryMobile常见问题
  5. excel删除重复数据保留一条_VBA利用字典删除重复行,保留唯一值
  6. 深度学习之卷积神经网络(12)深度残差网络
  7. Spring DAO之JDBC
  8. java 根据类名示例化类_如何使用示例从Java中的类路径加载资源
  9. 微信小程序需要https后台的创业机会思考
  10. git删除分支_程序员必须要掌握的 Git 使用技巧
  11. java class教程_深入理解Java Class文件格式(七)
  12. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块
  13. redis类型 tp5_tp5配置使用redis笔记!
  14. 万年历节气java代码_[分享]时钟万年历代码,供大家学习GUI
  15. Elasticsearch5.2.1集群搭建,动态加入节点,并添加监控诊断插件
  16. cachecloud部署和创建机器
  17. app store无法下载、安装软件,一直在转圈的一个解决方法
  18. mysql 查询字母集合_使用MySQL查询查找所有以字母“ a”,“ b”或“ c”开头的名称?...
  19. java程序员培训学习需要多长时间
  20. NLP实战:财经新闻热点发现

热门文章

  1. python代码变成运行程序_用Python脚本转换成windows的可执行程序
  2. python 类方法装饰器_python类装饰器即__call__方法
  3. conda init 关闭和重启shell_TP5实战源码 通过shell建立PHP守护程序
  4. linux知识点记录二
  5. 德云斗笑社何九华为什么没参加_江西省会为什么是南昌?
  6. 关于类与对象操作的细节与注意事项(c++细节篇三)
  7. 谷歌io大会 android p,谷歌I/O大会发布全新电视系统 Android P让电视变的更加智能...
  8. 天翼云从业认证(4.1)上云迁移实战
  9. 建信金融科技春季全国笔试卷B编程题
  10. 中国移动雄安研究院 2020校园招聘笔试JAVA方向(二)