简介

Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息通信。
为了避免ANR,我们通常会把一些耗时操作(比如:网络请求、I/O操作、复杂计算等)放到子线程中去执行,而当子线程需要修改UI时则子线程需要通知主线程去完成修改UI的操作,则此时就需要我们使用Handler机制来完成子线程与主线程之间的通信。

一、下面列出Handler相关的重要的类

  • Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

  • Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

  • MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

  • Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

二、 下面画图分析

  • 理解图
三、整个流程如下:
  • 1、以Handler的sendMessage方法为例,当发送一个消息后,会将此消息加入消息队列MessageQueue中。
  • 2、Looper负责去遍历消息队列并且将队列中的消息分发给对应的Handler进行处理。
  • 3、在Handler的handleMessage方法中处理该消息,这就完成了一个消息的发送和处理过程。
四、Handler 的基本使用

Message

  • message.what: 用户定义的消息代码,以便收件人可以识别
  • message.arg1 定义传递的int 类型的值1
  • message.arg2 定义传递的int 类型的值2
  • message.obj 定义传递的值由于类型是object(对象) 所以比较常用,可以传递各种值
  • handler.obtainMessage() 带参数形式发送消息,主要的却别代价可以通过下面的demo 区分,
  • message.setData() 使用bundle 的实行传参
下面是传参数为例子:

public class MainActivity extends AppCompatActivity {//创建一个Handler@SuppressLint("HandlerLeak")private Handler mhandler=new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);//对接收的message进行处理switch (msg.what) {case 1:Bundle data = msg.getData();Log.e("TAG", "测试接收数据---" + data.get("姓名"));break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = findViewById(R.id.button);//点击事件的处理button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Message message=new Message();message.what=1;Bundle bundle=new Bundle();bundle.putString("姓名","张三");message.setData(bundle);mhandler.sendMessage(message);
//                mhandler.sendEmptyMessage(1);
//sendEmptyMessage((what值)) 发送空的信息,只通知,不传任何参数}});}
}
  • 点击后控制台会打印如下:
例二:用handler获取系统实时的时间

点击参考获取实时的时间

全面讲解 Handler机制原理解析 (小白必看)相关推荐

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

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

  2. Handler机制原理解析(一)

    Handler机制原理解析(一) 我们都知道,在Android中,主线程也叫UI线程是负责界面更新的,子线程或者工作线程适合做网络请求,数据库等耗时操作.如果在主线程中执行耗时操作可能引发ANR异常. ...

  3. 开发直播源码需要了解哪些原理?小白必看内容

    在直播源码开发的过程中会涉及到很多技术细节和原理,只有对这些技术细节和原理有了了解,才能实现更高效率的开发.接下来我们就一起来看一下开发直播源码需要了解哪些原理吧. [一个完整直播源码架构] [一个完 ...

  4. android Handler机制原理解析(一篇就够,包你形象而深刻)

    首先,我将Handler相关的原理机制形象的描述为以下情景: Handler:快递员(属于某个快递公司的职员) Message:包裹(可以放置很多东西的箱子) MessageQueue:快递分拣中心( ...

  5. 消息队列 Kafka的架构原理 (小白必看)

    最终大家会掌握 Kafka 中最重要的概念,分别是 Broker.Producer.Consumer.Consumer Group.Topic.Partition.Replica.Leader.Fol ...

  6. JVM 虚拟机详解内部原理(小白必看!)

    前言 作为一名Java软件开发程序猿,不了解JVM?那么你就只能干CRUD的工作! 前几天刚学习了JVM,把学习到的经验在这里和大家分享下,有啥意见,欢迎在下方评论交流! 1.什么是JVM? JVM全 ...

  7. 消息队列 常见问题分析(小白必看)

    如果对消息队列的基础知识还不了解的话建议先阅读下文: 消息队列 基础入门(小白必看) 一.简介 很久以前也写过一篇关于消息队列的文章,这里的文章,这篇文章是对消息队列使用场景,以及一些模型做过一点介绍 ...

  8. AsyncTask机制原理解析

    AsyncTask机制原理解析 Android为我们提供了2种方便的异步处理方案,Handler和AsyncTask,两种方式适合的场景网上一搜就知道了,但是为什么呢?这篇分析将为你揭晓答案.前面分析 ...

  9. 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导

    爬虫是大家公认的入门Python最好方式,没有之一.虽然Python有很多应用的方向,但爬虫对于新手小白而言更友好,原理也更简单,几行代码就能实现基本的爬虫,零基础也能快速入门,让新手小白体会更大的成 ...

  10. 小白必看、手把手教你利用爬虫爬网页

    接下来从网络爬虫的概念.用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解. 网络爬虫及其应用 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战, ...

最新文章

  1. HDU2819Swap(二分图最大匹配)
  2. 向app store提交应用时,必须点“ready to upload binary”!
  3. 释疑の修改SAP标准表内容
  4. Java黑皮书课后题第8章:*8.25(马尔可夫矩阵)一个n*n的矩阵,如果每个元素都是正数,并且每列的元素的和为1,则成为正马尔可夫矩阵。编写下面的方法来检测矩阵是否是马尔可夫矩阵
  5. rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...
  6. phpMyAdmin - Error
  7. mybatis动态更新xml文件后热部署,不重启应用的方法
  8. mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
  9. 使用UWP人脸检测API在WPF中进行人脸检测
  10. 中如何构造有参和无惨_混凝土二次构造柱输送泵可提升施工效率
  11. C++自定义异常处理
  12. 让VS2010支持Windows2000
  13. 杰奇2.3内核淡绿唯美小说网站源码 PC+手机版
  14. SEO数据变化,检测网站死链接、蜘蛛访问、whois
  15. 命令行帮助文档语法格式详解
  16. 论文解读 用于弱监督表面缺陷分割的缺陷注意模板循环对抗网络 (Defect attention template generation cycleGAN for weakly supervised)
  17. 计算机表格性格计算,MBTI职业性格测试自动计算得分并得出分析结果.docx
  18. 新能源产业写入2021年11省两会政府工作报告,大爆发在即!
  19. 【经验】如何学习插画的构图?插画构图的基本原则!
  20. 发了一篇小红书,阅读量破了20W...

热门文章

  1. 好用的FTP下载工具 flashfxp工具
  2. bp神经网络算法原理公式,bp神经网络算法推导
  3. 升级到iOS9之后的相关适配
  4. 传说中的世界500强面试题-数学能力
  5. HCIE-Cloud题库
  6. 音视频编解码常用知识点
  7. cmd下载的python包,pycharm中却无法使用
  8. 电脑重启只剩下c盘怎么办_win10突然只剩下c盘了怎么办|win10突然只剩下c盘的解决方法...
  9. TwinCAT软件编码器参数介绍
  10. Flash cs6 学习(一) 制作一个包含几个按钮控件的影片剪辑