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

article/2025/11/6 1:06:32

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

先上图,让大家好理解下handler机制:

9ce29ffe1c1df1512ccf083301e60bc3.png

handler机制示例图

上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍:

ActivityThread:程序的启动入口,为什么要介绍这个类,是因为该类就是我们说的主线程,它对Looper进行操作的。

Handler:字面意思是操控者,该类有比较重要的地方,就是通过handler来发送消息(sendMessage)到MessageQueue和 操作控件的更新(handleMessage)。handler下面持有这MessageQueue和Looper的对象。

MessageQueue:字面意思是消息队列,就是封装Message类。对Message进行插入和取出操作。

Message:这个类是封装消息体并被发送到MessageQueue中的,给类是通过链表实现的,其好处方便MessageQueue的插入和取出操作。还有一些字段是(int what,Object obj,int arg1,int arg2)。what是用户定义的消息和代码,以便接收者(handler)知道这个是关于什么的。obj是用来传输任意对象的,arg1和arg2是用来传递一些简单的整数类型的。

下面,我们按照启动顺序来进行源码分析:

30a01ad2c193d50c016d17f28ca18429.png

从上面可以看出,ActivityThread类是用来启动Android的,其源码为:

2b77e7259ef9833a01b0d1600ca9a996.png

ActivityThread类:

接下来,我们看到Looper类了,我们进去看看里面的源码实现:

首先,我们看看里面有哪些字段:


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

相关文章

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主…

matlab中reshape的用法,reshape2 函数 reshape 的用法

函数 reshape 的用法 请我在MATLAB编程中遇到了一个问题,函数reshape的用法我就是没有弄B reshape(A,m,n) 返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个, 则会引发错误。 B reshape(A,m,n,p,...)和B reshape(…

Numpy之reshape()详解

Numpy中reshape的使用方法为:numpy.reshape(a, newshape, orderC) 参数详解:1.a: type:array_like(伪数组,可以看成是对数组的扩展,但是不影响原始数组。) 需要reshape的array2.newshape:新的数组 新形状应与原形状兼容。如果是整数&#xf…

利用Numpy库的方法reshape()对ndarray对象矩阵的形状进行调整

利用Numpy库的函数reshape()对ndarray对象矩阵的形状进行调整 调整矩阵或图像的形状是一个常用的操作。 在Numpy库中,可使用函数reshape()实现此操作。 其函数原型如下: dst numpy.reshape(a, newshape[, orderC])参数意义如下: a—需要调…