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

article/2025/11/6 0:49:10
简介

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获取系统实时的时间

点击参考获取实时的时间


http://chatgpt.dhexx.cn/article/He0RvaYw.shtml

相关文章

Android :安卓学习笔记之 Handler机制 的简单理解和使用

Android Handler机制的简单理解和使用 Handler机制1、Handler使用的引出2、背景和定义3、作用和意义4、主要参数5、工作原理及流程5.1、对应关系 6、深入分析 Handler机制源码6.1、Handler机制的核心类6.2、核心方法6.3、方式1:使用 Handler.sendMessage&#xff08…

多线程通信---Handler机制

目录 作者简介: 1. 概述: 1.1 如何把子线程中计算的结果传给主线程? 2.handler异步通信系统 2.1 多线程通信过程 3.代码演示 3.1 子线程部分 3.2 主线程handler部分 3.3 MainActivity代码 3.4 布局代码 4.效果演示 5.拓展 作者简介&a…

android handler的机制原理,Android Handler 机制实现原理分析

handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段。使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息。但是,有没有人想过这种技术是怎么实现的呢&#xf…

android源码学习-Handler机制及其六个核心点

前言: 该文属于安卓源码探究专栏中的文章,专栏所有文章清单链接如下,欢迎大家阅读。 安卓源码探究 一、Handler机制介绍 1.1 Handler是什么? Handler是安卓中很常用的一种机制,其主要用于线程之间的通信。 1.2 为…

Handler机制原理----全解

Handler机制,我们就会想到,他有四个重要的对象组成,分别是:Handler,Message,MessageQueue,Looper. 那Handler是如何工作的呢? 例如,你想刷新主界面的TextView,无奈你不在主线程&am…

Android面试必问之Handler机制

Android面试必问之Handler机制 1. 作用2. 基本使用2.1 创建Handler实例2.2 发送消息2.3 使用post方法2.4 使用sendMessage方法2.5 通过Message与Handler进行通信的步骤 3. 源码分析3.1 为什么Handler能够切换线程执行?3.2 Handler.post(Runnable) 方法是运行在新的线…

java中handler机制_自己动手撸一个Handler,让你彻底搞懂Handler机制,揍吻你服不服?...

原标题:自己动手撸一个Handler,让你彻底搞懂Handler机制,揍吻你服不服? 一、关于Handler Handler对于我们Android开发者来说应该是再熟悉不过了,这也是在android中最重要的消息机制,特别是在面试笔试时,Handler机制也是最常问到的话题。今天我们就来动手撸一个自己写的H…

一文搞懂Handler机制

什么是Handler? Handler是进程内部、线程间的一种通信机制。 Handler、Looper、MessageQueen、Message的关系 Message: 消息对象 MessageQueen: 存储消息对象的队列 Looper:负责循环读取MessageQueen中的消息,读到消息之后就把消息交给Handler去处理。 Handler&…

Handler机制(异步消息处理机制)

Android的异步消息处理由四个部分组成:Message、Handler 、MessageQueue和Looper。 先抛出自己的几个问题供自己以后进行回顾复习: 1、为什么需要进行异步消息处理? 大量耗时的操作我们一般是另开一个子线程来进行处理,但是在子线…

Android - 浅谈 Handler 机制

熟悉 Android 开发的小伙伴都知道,不能再非主线程中修改 UI 控件,而且当时老师告诉我们就是在非主线程的代码修改 UI 控件可以用 Handler。以至于后来我也都是这么做的,最近有人问我这个自定义的 Handler 为啥下面都是黄色的,是不…

【Android】Handler机制详解

【Android】Handler机制详解 本文是在 Carson带你学Android 作者的异步通信 专栏中Handler的基础上学习整理的kotlin版本,并且Android源码部分也更新至最新。 1.使用Handler消息传递机制的原因 2.相关概念 概念定义作用备注Main Thread应用程序初次启动时会自动开…

一文搞懂Handler机制原理

前言 Android提供了Handler来满足线程间的通信,开发中不管直接还是间接基本离不开Handler的使用,通常Handler被我们用来做子线程更新UI线程的工具,可以说只要有子线程与主线程通信的地方就会有Handler。 工欲善其事必先利其器,熟…

handler机制原理

一,什么是handler handler是消息机制的一个上层接口 更新UI的操作 耗时完毕后发送消息给主线程更新UI 耗时操作只能在子线程中执行,Android是线程不安全的你不能在子线程中更新UI 所以Android引入了handler机制 handler通过发送和处理message和Runnable对象来关联相对应线程的…

Android Handler消息机制原理最全解读(持续补充中)

本文主要详细去解读Android开发中最常使用的Handler,以及使用过程中遇到的各种各样的疑问。 Handler 在Android开发的过程中,我们常常会将耗时的一些操作放在子线程(work thread)中去执行,然后将执行的结果告诉UI线程…

Handler机制

1.为何引入Handler机制 Handler是线程间通讯的机制,Android中,网络访问、文件处理等耗时操作必须放到子线程中去执行,否则将会造成ANR异常。 ANR异常:Application Not Response 应用程序无响应 产生ANR异常的原因:在…

Handle消息机制解析

概述 Handler消息机制(由Handler/Looper/MessageQueue等构成),Android有大量的消息驱动方法来进行交互,就像Android的四大组件(Activity、Service、Broadcast、ContentProvider)的启动过程交互,都离不开Handler的消息机制,所以An…

Handler机制(一)——Handler运行流程分析

1 概述 Handler机制是Android的异步消息处理机制,用于在线程间传递消息,主要涉及到四部分:Handler、Looper、Message和MessageQueue。其中Handler是消息的发送者和处理者;Message是消息主体;MessageQueue是消息队列&a…

reshape的作用

reshape就是矩阵的变换就是行和列相乘的数相等就可以相互变换

reshape函数

在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。 函数原型: C: Mat Mat::reshape(int cn, int rows0) const 参数比较少,但设置的时候却要千…

Reshape的命令应用

import numpy as np tnp.arange(0,64).reshape(8,8) print(t) Reshape 的参考使用: (1条消息) Python的reshape的用法:reshape(1,-1)_冷月无声的博客-CSDN博客_reshape函数pythonhttps://blog.csdn.net/qq_29831163/article/details/90112000Reshape主…