Android之Handler的post方法和sendMessage的区别

目录

  • post 方法
    • 方法
    • 特点
  • sendMessage 方法
    • 方法
    • 特点
  • 使用场景
  • 区别总结

Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务:通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。

post 方法

方法

  • post(Runnable r)
  • postDelayed(Runnable r, long delayMillis)
  • postAtTime(Runnable r, long uptimeMillis)
Handler handler = new Handler(Looper.getMainLooper());// 立即执行
handler.post(new Runnable() {@Overridepublic void run() {// 在主线程中执行的代码Log.d("Handler", "Runnable executed");}
});// 延迟执行
handler.postDelayed(new Runnable() {@Overridepublic void run() {// 在主线程中执行的代码Log.d("Handler", "Runnable executed after delay");}
}, 2000); // 延迟2秒

特点

  • 直接执行代码:Runnable 直接包含要执行的代码块,不需要额外的封装。
  • 简单易用:对于简单的任务,使用 Runnable 更加直观和简洁。
  • 不需要消息传递:Runnable 不涉及消息的创建和处理,直接将代码提交给 Handler 执行。
  • 适用于直接执行任务:post 方法适用于需要在特定线程(通常是主线程)上执行任务的场景。

sendMessage 方法

方法

  • sendMessage(Message msg)
  • sendMessageDelayed(Message msg, long delayMillis)
  • sendMessageAtTime(Message msg, long uptimeMillis)
Handler handler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:// 处理消息1Log.d("Handler", "Message 1 received");break;case 2:// 处理消息2Log.d("Handler", "Message 2 received");break;default:super.handleMessage(msg);}}
};// 创建消息
Message message = handler.obtainMessage(1);
handler.sendMessage(message);// 延迟发送消息
Message delayedMessage = handler.obtainMessage(2);
handler.sendMessageDelayed(delayedMessage, 2000); // 延迟2秒

特点

  • 消息传递:Message 允许在不同线程之间传递数据。可以通过 Message 的 what、arg1、arg2 和 obj 字段传递不同类型的数据。
  • 灵活性:Message 适用于需要传递复杂数据或需要区分多种任务的场景。
  • 需要处理消息:需要在 Handler 的 handleMessage 方法中处理接收到的消息。
  • 适用于复杂任务:sendMessage 方法适用于需要传递数据并在接收端进行处理的场景。

使用场景

  • post 方法 适用于简单的任务,例如在主线程中更新 UI,不需要传递复杂数据。
  • sendMessage 方法 适用于需要在不同线程之间传递数据,或需要区分和处理多种任务的场景

区别总结

在这里插入图片描述

Android 之 Handler
HandlerThread 和 Handler 区别
Android之Handler是如何保证延迟发送的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1522644.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才…

自动生成对话视频!如何使用Captions的AI视频生成与编辑API工具?

Captions公司最近发布了一套AI驱动的视频生成和编辑API工具,为创作者和开发者提供了一个强大的视频创作生态系统。这个系统包含AI Creator、AI Twin、AI Edit、和AI Translate四大核心功能,每个工具都针对不同的创作需求进行优化。下面我们就一起来详细测…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨,从为什么需要这类”循环网络“入手,提到了”slot filling“技术,接着又对R…

AT3340:支持BDS/GPS双模授时板数据手册

AT3340采用ATGM331C-5T31授时模块,是高授时精度的BDS/GPS双模接收机板卡,包含32个跟踪通道,支持GPS和BDS的单系统授时定位和双系统联合授时定位,可以通过上位机命令切换。其中的射频前端芯片和基带芯片全部由杭州中科微独立研发&a…

RAG数据集自动构造探索, 附prompt

从文档中手动创建数百个 QA(问题-上下文-答案)样本可能非常耗时且劳动密集。此外,人工生成的问题可能难以达到全面评估所需的复杂程度,最终影响评估的质量。通过使用合成数据生成,开发人员在数据聚合过程中的时间可以减…

嵌入式Linux:常见信号的默认行为

信号是一种软件中断,用于通知进程发生了某种异步事件。信号可以由用户、其他进程或操作系统内核产生。进程可以选择捕获并处理这些信号,或者忽略它们,让系统执行默认操作。 不可靠信号(非实时信号):编号为 …

观测云核心技术解密:eBPF Tracing 实现原理

前言 eBPF 是一种强大的内核技术,允许在内核中安全地执行自定义代码。通过 eBPF,开发者可以在不修改内核源码的情况下,对内核功能进行扩展和监控。eBPF Tracing 利用这一技术,对系统调用、内核函数等进行跟踪,从而实现…

【IPV6从入门到起飞】2-1 获取你的IPV6(手机、CPE等)

【IPV6从入门到起飞】2-1 获取你的IPV6(手机、CPE等) 1 IPV6就在身边2 手机IPV62.1 查看IPV62.2 IPV6 ping包测试2.3 IPV6入站测试 3 电脑通过CPE获取IPV63.1 拉不起宽带的打工人3.2 开始部署IPV6环境3.2.1 刷系统3.2.2 激活IPV63.2.3 设置防火墙入站&am…

JAVA - 关于防重复提交探讨

1、前端提交按钮做单次点击 2、后端接收判断请求的数据包,生成唯一key存redis,设置几秒的过期时间(缺陷:带时间戳的数据,需要做些逻辑判断) 3、后端代码逻辑redis分布式锁(缺陷:re…

P01-Java何谓数组

P01-Java何谓数组 一、数组声明创建 1.1 数组声明的语法 与c有所不同 在Java中,数组声明语法 首选语法: //数据类型[] 数组名称; int[] arr;次选,与c类似 //数据类型 数组名称[]; int arr[];1.2 数组创建语法 与c指针有所相似&#xff0…

从源码开始:打造智能化食堂采购与供应链管理平台

随着食堂规模的扩大和供应链的复杂化,这些问题更加突出。智能化的食堂采购平台可以通过自动化流程、数据分析和智能推荐,显著提高采购效率,减少浪费,并降低运营成本。 要打造这样一个平台,首先需要对食堂的日常运营需…

Python基础语法(多进程开发进程建数据共享进程锁进程池)

Python基础语法文章导航: Python基础(01初识数据类型&变量)Python基础(02条件&循环语句)Python基础(03字符串格式化&运算符&进制&编码)Python基础(04 基础练习…

【MATLAB源码-第259期】基于matlab的64QAM调制解调锁相环环载波同步仿真,对比前后星座图,输出锁相环响应曲线。

操作环境: MATLAB 2022a 1、算法描述 1. 概述 在现代数字通信系统中,为了提高频谱利用率和数据传输效率,经常采用多阶调制技术。64QAM(64阶正交幅度调制)便是其中的一种,它通过将数据映射到64个不同的复…

入门篇 LeetCode算法之旅启程 - 从零开始的编程进阶之路

你是否曾经在技术面试中因为算法题而汗流浃背?是否在日常编码中感觉自己的解决问题能力有待提高? 目录 LeetCode: 你的算法训练场为什么选择LeetCode?LeetCode平台使用指南1. 注册与登录2. 探索题库3. 解题过程4. 提交与反馈5. 学习与讨论6. 追踪进度7. 参与竞赛 制定你的…

【专项刷题】— 哈希表

1、两数之和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 使用哈希表&#xff0c;将每次x target - nums[i]&#xff0c;查看哈希表中是否含有这个x值代码&#xff1a; public int[] twoSum(int[] nums, int target) {int n nums.length;Map<Integer,Inte…

坐牢第三十四天(c++)

一.作业 1.栈的手写 #include <iostream> using namespace std; // 封装一个栈 class stcak { private:int *data; //int max_size; // 最大容量int top; // 下标 public:// 无参构造函数stcak();// 有参构造函数stcak(int size);// 拷贝构造函数stcak(const s…

0903作业+思维导图

一、作业 1》多态的实现 1、代码 #include <iostream>using namespace std; //父类 class Person { public:string name;int age; public:Person(){}Person(string n,int a):name(n),age(a){}~Person(){}//纯虚函数virtual void show() 0; }; //子类1 class Stu:publ…

wsl下将Ubuntu从c盘移动到其他盘

一、概述 因为自己的C盘内存不足&#xff0c;加上之后需要在Ubuntu下面下载许多的内容和东西&#xff0c;需要将其移动到d盘上面&#xff0c;这样可以拥有更大的空间。这里记载了一下自己的操作过程。 二、具体步骤 &#xff08;一&#xff09;过程 1.查看当前系统中wsl分发版…

Haskell爬虫:连接管理与HTTP请求性能

爬虫技术作为数据抓取的重要手段&#xff0c;其效率和性能直接影响到数据获取的质量与速度。Haskell&#xff0c;作为一种纯函数式编程语言&#xff0c;以其强大的类型系统和并发处理能力&#xff0c;在构建高效爬虫方面展现出独特的优势。本文将探讨在Haskell中如何通过连接管…

技术Leader在训练团队思考力中的核心职责

引言 在技术驱动的行业中&#xff0c;技术团队的创新能力与问题解决能力往往直接关联到项目的成败与企业的竞争力。而这一切的基石&#xff0c;离不开团队中每一个成员的思考力。作为技术团队的领航者&#xff0c;技术Leader在培养和提升团队思考力方面扮演着至关重要的角色。…