全面讲解 Handler机制原理解析 (小白必看)
简介
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机制原理解析 (小白必看)相关推荐
- Handler机制原理解析(二)prepare,loop,post
Handler机制原理解析(二)prepare,loop,post 上一篇已经介绍了Handler机制的原理,如果不熟悉可以看Handler机制原理解析(一).这一篇,介绍下Handler周边的知识点 ...
- Handler机制原理解析(一)
Handler机制原理解析(一) 我们都知道,在Android中,主线程也叫UI线程是负责界面更新的,子线程或者工作线程适合做网络请求,数据库等耗时操作.如果在主线程中执行耗时操作可能引发ANR异常. ...
- 开发直播源码需要了解哪些原理?小白必看内容
在直播源码开发的过程中会涉及到很多技术细节和原理,只有对这些技术细节和原理有了了解,才能实现更高效率的开发.接下来我们就一起来看一下开发直播源码需要了解哪些原理吧. [一个完整直播源码架构] [一个完 ...
- android Handler机制原理解析(一篇就够,包你形象而深刻)
首先,我将Handler相关的原理机制形象的描述为以下情景: Handler:快递员(属于某个快递公司的职员) Message:包裹(可以放置很多东西的箱子) MessageQueue:快递分拣中心( ...
- 消息队列 Kafka的架构原理 (小白必看)
最终大家会掌握 Kafka 中最重要的概念,分别是 Broker.Producer.Consumer.Consumer Group.Topic.Partition.Replica.Leader.Fol ...
- JVM 虚拟机详解内部原理(小白必看!)
前言 作为一名Java软件开发程序猿,不了解JVM?那么你就只能干CRUD的工作! 前几天刚学习了JVM,把学习到的经验在这里和大家分享下,有啥意见,欢迎在下方评论交流! 1.什么是JVM? JVM全 ...
- 消息队列 常见问题分析(小白必看)
如果对消息队列的基础知识还不了解的话建议先阅读下文: 消息队列 基础入门(小白必看) 一.简介 很久以前也写过一篇关于消息队列的文章,这里的文章,这篇文章是对消息队列使用场景,以及一些模型做过一点介绍 ...
- AsyncTask机制原理解析
AsyncTask机制原理解析 Android为我们提供了2种方便的异步处理方案,Handler和AsyncTask,两种方式适合的场景网上一搜就知道了,但是为什么呢?这篇分析将为你揭晓答案.前面分析 ...
- 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导
爬虫是大家公认的入门Python最好方式,没有之一.虽然Python有很多应用的方向,但爬虫对于新手小白而言更友好,原理也更简单,几行代码就能实现基本的爬虫,零基础也能快速入门,让新手小白体会更大的成 ...
- 小白必看、手把手教你利用爬虫爬网页
接下来从网络爬虫的概念.用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解. 网络爬虫及其应用 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战, ...
最新文章
- HDU2819Swap(二分图最大匹配)
- 向app store提交应用时,必须点“ready to upload binary”!
- 释疑の修改SAP标准表内容
- Java黑皮书课后题第8章:*8.25(马尔可夫矩阵)一个n*n的矩阵,如果每个元素都是正数,并且每列的元素的和为1,则成为正马尔可夫矩阵。编写下面的方法来检测矩阵是否是马尔可夫矩阵
- rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...
- phpMyAdmin - Error
- mybatis动态更新xml文件后热部署,不重启应用的方法
- mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
- 使用UWP人脸检测API在WPF中进行人脸检测
- 中如何构造有参和无惨_混凝土二次构造柱输送泵可提升施工效率
- C++自定义异常处理
- 让VS2010支持Windows2000
- 杰奇2.3内核淡绿唯美小说网站源码 PC+手机版
- SEO数据变化,检测网站死链接、蜘蛛访问、whois
- 命令行帮助文档语法格式详解
- 论文解读 用于弱监督表面缺陷分割的缺陷注意模板循环对抗网络 (Defect attention template generation cycleGAN for weakly supervised)
- 计算机表格性格计算,MBTI职业性格测试自动计算得分并得出分析结果.docx
- 新能源产业写入2021年11省两会政府工作报告,大爆发在即!
- 【经验】如何学习插画的构图?插画构图的基本原则!
- 发了一篇小红书,阅读量破了20W...