Handler异步消息传递机制(一)Handler常用基本用法

Android中Handler的使用方法详解 通过上述步骤,你可以在Android应用程序中使用Handler进行线程间的通信和消息处理。Handler提供了一种方便且灵活的方式来处理异步操作,特别是在UI线程中更新UI。Handler在Android开发中扮演着重要的角色,用于在不同线程之间进行通信和消息处理。本文将详细介绍Android中Handler的使用方法,并提供相应的源代码示例。希望本文对你理解Android中Handler的使用方法有所帮助。如果你有任何疑问,请随时提问。 阅读详情

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!

目录

一、简介

1、Handler的实现方式?

2、发送消息和处理消息

二、实战案例

1、Handler对象在新启动的子线程发送消息

2、在主线程中创建Handler、并获取处理消息

3、demo 演示效果

三、总结说

1、Handler基本用法

2、Handler能解决的常见问题?


系列文章

Handler异步消息传递机制(一)Handler常用基本用法

Handler异步消息传递机制(二)在子线程中创建Handler

Handler异步消息传递机制(三)在主线程、子线程中创建Handler,源码(Android 9.0)解析

Handler异步消息传递机制(四)Handler发送消息流程,源码(Android 9.0)解析

一、简介

Android的消息传递机制主要是为了解决Android应用的多线程问题,而Android平台不允许Activity新启动的子线程访问此Activity里面的界面组件,这样会导致新启动的线程无法动态改变界面组件的属性值。

如:Android实际开发当中,尤其涉及游戏开发经常需要新启动的线程,周期性的去访问改变界面组件的属性值。那么怎么解决呢?我们可以用Handler、AsyncTask相关机制来解决。

这篇我们主要讲Handler,有关AsyncTask介绍可参考:Android专题之AsyncTask(一)基本概念介绍

1、Handler的实现方式?

  (1)在主线程中创建Handler,通过回调的方式获取、处理消息

  (2)在新启动的线程中发送消息    

2、发送消息和处理消息

为了让主线程能更好的处理新启动的线程所发送的消息,显然只能通过回调的方式来实现。

开发者只需要重写Handler类中处理消息的方法,当新启动的子线程发送消息时,Handler类中处理消息的方法被自动回调。

Handler类中包含如下方法发送、处理消息:

二、实战案例

这里我就把以前项目 “app下载更新自动安装” 的代码给改了改,因为主要是演示Handler的用法,所以其它步骤就用模拟或输出的形式呈现!

1、Handler对象在新启动的子线程发送消息

模拟下载app,并在新启动的子线程发送消息

public class DownLoadAppFile {
    public void download(String urlPath, Handler handler, ProgressBar pb) {

        try {
            //下载apk的代码,这里用线程睡眠模拟
            Thread.currentThread().sleep(3*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Message msg = Message.obtain();
        msg.what =1;//成功
        //msg.what =2;//失败
        handler.sendMessage(msg);//(子线程)发送消息

    }
}

2、在主线程中创建Handler、并获取处理消息

public class MainActivity extends AppCompatActivity {
    private  TextView show_text;
    private String strMsg;

    //在主线程中获取、处理消息
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1://下载成功
                    strMsg = strMsg +"\n"+ "2、apk下载成功。。。开始自动安装下载好的apk!";
                    show_text.setText(strMsg);
                    Toast.makeText(MainActivity.this,"apk下载成功!",Toast.LENGTH_SHORT).show();
                    break;
                case 2://下载失败
                    strMsg = strMsg +"\n"+ "apk下载失败!";
                    show_text.setText(strMsg);
                    Toast.makeText(MainActivity.this,"apk下载失败!",Toast.LENGTH_SHORT).show();
                    break;

                default:
                    break;
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        show_text = (TextView) findViewById(R.id.show_text);

        downloadApkFile();

    }


    /**
     *  下载apk文件
     *  注:Android 6.0以上需要申请读写权限
     */
    private void downloadApkFile() {

        strMsg = "1、开始下载apk。。。";
        show_text.setText(strMsg);
        Toast.makeText(MainActivity.this,"开始下载apk。。。",Toast.LENGTH_SHORT).show();

        new Thread() {//在新启动的子线程,调用下载app的代码,并发送消息、反馈结果
            public void run() {

                DownLoadAppFile downLoadFile = new DownLoadAppFile();
                downLoadFile.download(null, handler, null);
            };
        }.start();
    }
}

3、demo 演示效果

demo地址:我的Handler专题系列代码01-Android代码类资源-优快云下载

效果如下:

三、总结说

1、Handler基本用法

(1)在主线程中创建Handler,通过回调的方式获取、处理消息

(2)在新启动的线程中发送消息

2、Handler能解决的常见问题?

问题:

新启动的线程无法动态改变界面组件的属性值

原因:

Android的消息传递机制主要是为了解决Android应用的多线程问题,

而Android平台不允许Activity新启动的子线程访问此Activity里面的界面组件。

常见使用场景举例:

(1)app升级下载安装,实时更新进度条

(2)游戏开发经常需要新启动的线程,周期性的去访问改变界面组件的属性值

handler解析(3)-同步消息、异步消息、同步屏障 Message分为3种:普通消息(同步消息)、屏障消息(同步屏障)和异步消息。我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。也就是我一般使用的Message,再通过Handler进行到消息队列,前提是构造Handler时候传的构造参数async为false。 阅读详情

相关推荐

Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系

这样不同的线程访问同一个 ThreadLocal 时,获取到的值也就是各个线程存储时对应的值了。size 代表表中的存储数目;在Handler的handleMessage()方法中,我们可以重写自定义的消息处理逻辑,这个方法最终会由Looper.loop()中的msg.target.dispatchMessage(msg)回调执行。在构造Handler实例时,会获取当前线程的Looper,并将Handler的MessageQueue与Looper内部的MessageQueue建立关联。

w风雨无阻w的专栏 1490

Handler使用方法详解(含实例)

0、目录 一、相关概念简介 二、使用方式 三、使用步骤 四、实例讲解 五、总结 一、相关概念简介 Handler是一套消息传递机制,通常的作用是在多线程的应用场景中,将子线程(工作线程)中需要更新UI的相关信息传递到主线程,从而实现工作线程对UI的更新。 二、使用方式 Handler的使用方式可以根据发送消息的方式不同而分为两种: Handler.sendMessage()...

haovin的博客 2万+

Handler消息传递机制详解

序言 随着科技的发展,人们的日常生活习惯也伴随着巨大改变。手机也取代了电脑,成为人们的“贴身小伙伴”,似乎时时刻刻都离不开手机,吃饭走路都要盯着手机,也造成了许多安全事故,希望大家在非必要时还是不要玩手机,利人利己啊。 说起智能手机系统,安卓系统当然是至今市场占有率最高的咯。谷歌也在不断优化系统,提升用户体验。作为安卓开发对于内部底层代码实现还是要熟知一二的,今天来详细...

hj2drf的博客 2532

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

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

qq_49792179的博客 2049

Handler消息机制和异步加载

Handler消息机制和syncTask异步加载,有代码和文档。

Qwen3.5在昇腾NPU上部署:vLLM-Ascend全链路实战

大语言模型推理框架(如vLLM)通过PagedAttention等内存调度机制,显著提升显存利用率与吞吐性能;国产AI芯片(如昇腾NPU)需配套专用算子优化与硬件感知调度才能释放真实算力。本文聚焦Qwen3.5大语言模型在昇腾平台的端到端部署,深入解析vLLM-Ascend如何协同CANN工具链、适配RoPE位置编码与Tokenizer映射、调优block_size与kv_cache_dtype等关键参数,实现单卡42 tokens/s高吞吐与112ms低延迟。内容覆盖环境验证、源码编译、模型权重转换、服务

weixin_34335458的博客 279

Android 异步消息处理机制的几种实现

Android 异步消息处理机制的几种实现 1、概述 Android需要更新ui的话就必须在ui线程上进行操作。否则就会抛异常。 假如有耗时操作,比如:在子线程中下载文件,通知ui线程下载进度,ui线程去更新进度等,这个时候我们就需要用到异步消息处理。 一、什么是Handler Handler是Android提供用来异步更新UI的一套机制,也是一套消息处理...

a day a better 2813

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4604

Android异步消息处理机制(一):简单使用

前几天发博客说要看源码写博客,今天终于要开张了;第一个专题是Android异步消息处理机制,虽然平时经常用到Handler,用法也比较简单,但是看完源码之后,发现里面还是有很多知识点的^_^ 1.概述 Handler在平常开发中经常使用到,用来在不同组件(这里的组件不是Android里的组件,可以理解为代码块,类,线程,进程都可以)之间进行消息传递; 本专题会分以下几篇(暂定两篇)来详细描述

1010

cosmos-curate工业级视频数据预处理引擎/终端用户指南( end-user-guide)

摘要:Cosmos-Curate是一个用于视频和自动驾驶数据处理的开源工具,提供从本地到集群的完整部署方案。文档针对三类用户:终端用户(配置运行现有管道)、开发者(修改/创建管道)和贡献者(改进代码库)。核心功能包括容器化设计(Docker+NVIDIA工具链)、多平台支持(本地/Slurm/云)、集成HuggingFace/NGC模型,以及可扩展的管道架构。使用需满足硬件(如Ampere架构GPU)和软件(Ubuntu22.04+Python3.10)要求,通过CLI工具构建镜像、下载模型并运行示例管道(

qq_45053161的博客 1203

【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序

这是我们学习的第四款智能体框架了。前面我们学习了 AutoGPT、MetaGPT、LangGraph 等智能体应用开发框架,各有优缺点。今天我们开始学习AgentScope这一款多智能体开发框架。卷起来吧,多看看,多用用,没坏处。

同学小张的博客 5427

深入学习理解 Handler HandlerThread AsyncQueryHandler 三者的关系

首先创建工程 ThreadDemo 创建Activity 一、Handler Handler在android里负责发送和处理消息。它的主要用途有:   1)按计划发送消息或执行某个Runnanble(使用POST方法);   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)    默认情况下,Handler接受的是当前线程下的消息循环实例(使用Handler

pathfinder 1007

对角两对双差速轮AGV的平移、直行、转弯和原地旋转之PID控制

本示例将展示如何使用PID控制算法,控制具有对角线布置的两对双差速轮(左前和右后)的AGV,实现平移、直行、转弯和原地旋转等运动。通过对车辆的运动学和PID控制器的设计,我们可以精确地控制AGV的运动

xiaoc100200的博客 1512

Android handler looper

android的消息处理有三个核心类:Looper,Handler和Message。其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因此我没将其作为核心类。下面一一介绍: 线程的魔法师 Looper Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成Looper线程。所谓Looper线程就是循环工作的线程。在程序

4156

9、工业数据管理:Historian、ERP、MES与资产模型解析

本文深入解析了工业数据管理中的核心概念与技术,包括Historian数据库、ERP和MES系统以及资产模型。文章详细介绍了Historian数据库的特性、架构分类、数据采集方式及时间序列处理能力,同时探讨了ERP和MES系统的功能与优势,特别是MES在生产执行中的重要作用。资产模型部分结合ISA-95和ISA-88标准,阐述了工业资产的层次化建模方法。此外,文章还分析了各系统之间的协同关系、面临的挑战及应对策略,并展望了未来工业数据管理的发展趋势,如云原生技术、人工智能融合和工业物联网的应用。

pz89012345的博客 144

(27)FPGA实现AD7768接口(六)

AD7768/AD7768-4 为8通道和4通道24位同步采样模数转换器(ADC)。通过可选的功耗模式和数字滤波器选项可重新配置AD7768/AD7768-4以适应多种应用,如工业输入/输出模块、仪器仪表、音频测试、控制回路和状态监控。FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。

m0_46498597的博客 997

Handler消息传递机制浅析

Android 的 Handler 消息机制是线程间通信的核心组件,主要用于主线程与子线程之间的通信。它基于消息队列(MessageQueue)和事件循环(Looper)实现,通过 sendMessage() 发送消息并在 handleMessage() 中处理。典型应用场景包括异步更新 UI、定时任务等。使用时需注意内存泄漏问题,在 Activity 销毁时应移除未处理消息。示例展示了子线程执行任务后通过 Handler 更新 UI 的完整流程,涉及 DrawerLayout 等组件的配合使用。高版本 A

likuoelie的博客 1122

低功耗设计:如何计算power switch的数量?

power switch加多了漏电高,加少了ir drop会有问题,具体加多少合适要如何计算呢?这里可以给一个参考方式。 第一步,先选switch cell的类型 通常选用HVT类型的switch cell,优点是漏电更低,缺点也很明显,电阻大,压降也大,switch cell的大小选择,可以选择(开启电阻x面积)最小的switch cell,即单位面积提供最小并联电阻的cell类型。 第二步,计算数量 选好类型,确定了开启电阻,可以按照如下公式计算数量: Ron/Xnum • W/V = V•P

m0_61544122的博客 3577

Handler机制

Handler机制

似霰的博客 3402

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Handler异步消息传递机制(二)在子线程中创建Handler

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!! 目录 一、前言 二、简介 三、在主线程中创建Handler 四、在子线程中创建Handler 五、总结说 1、Handler的创建 系列文章 Handler异步消息传递机制(一)Handler常用基本用法 Handler异步消息传递机制(二)在子线程中创建Handler Handler异......

鲁迷那的专栏—坚持实践后再写出来! 1559

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android基础——Handler消息传递机制解析

Android开发基础学习之Handler消息传递

weixin_44901971的博客 1692

android handler 传递对象,Android之Handler消息传递机制详解

前言在Android开发中,多线程应用是非常频繁的,其中Handler机制随处可见.下面就本人对Handle的一些理解与大家一起分享,共同回顾下Handle异步消息传递机制。1.Handler是什么?Handler是一套在 Android开发中 进行异步消息传递的机制。2.Handler在Android中的作用在Android开发中多线程的应用中,将工作线程中需更新UI的操作信息 传递到 UI主线...

weixin_31574891的博客 1997

Android线程异步机制Handler与AsyncTask详解

一、线程异步简介 基于移动客户端的软件特别强调实时性,Android程序更是如此,任何一个程序超过5s没有响应,都会被系统强制杀掉。而且Android也不允许在UI线程中进行任何网络操作,否则就会产生NetworkOnMainThreadException异常。因此,凡是耗时的操作,都不应该直接出现在UI线程中。今天,我通过最简单直观地示例总结下Android开发中最常用的两种处理耗时操作的方法

夏天的夏,夏天的天。 6438

Handler消息传递机制

(1)Looper:每一个线程只有一个Looper,负责管理MessageQueue,会不断地从MessageQueue中取出消息,并将消息分给对应的Handler处理。(2)MessageQueue:由Looper负责管理。(3)Handler:它能把消息送到Looper管理的MessageQueue,并负责处理Looper分为它的消息。

luyao3038的博客 1905

Android开发之Handler消息传递机制总结

Android开发之Handler消息传递机制总结 Handler消息传递机制:主要用于对异步任务的消息处理机制; Handler工作原理:当任务发出消息时,会将所发的消息压入消息队列(队列:先进先出)中,然后通过轮询的方式对队列里面的消息逐一取出,并在handleMessage事件中对取出的消息进行监听,然后做出相应的处理, 这种机制通常用来处理相对耗时比较长的操作。如下图所示: Ha...

u012475786的专栏 641

【精华】Android面试精华总结——Handler消息传递机制

一、消息传递机制   Android应用程序被创建的时候都会创建一个UI主线程,但有时会有一些比较耗时的操作,为了防止阻塞UI主线程,我们会将耗时的操作放到子线程中进行处理,处理完之后操作UI,但是Android不允许子线程操作UI,违背了Android单线程模型的原则(即 Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行)。   消息传递机制主要是为了解决Android应...

time-space的博客 820
上一篇: Mac搜索怎样才更精准?模糊查询
下一篇: java服务器开发:3、演示 Android 请求访问服务器_静态资源_更新QQ
被开发耽误的大厨
被开发耽误的大厨 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄15年 4万+粉丝 635原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值