鸿蒙实现类似于安卓的Handler,鸿蒙的延迟和异步操作

news2025/7/23 6:38:55

在安卓开发的时候我们想要去延迟处理一些事情可以通过 Handler 解决,比如一秒后处理某些事情:

new Handler().postDelayed(new Runnable() {
         @Override
         public void run() {

         }
},1000);

鸿蒙也提供了类似的方法,如下:

getUITaskDispatcher().delayDispatch(new Runnable() {
         @Override
         public void run() {
                
         }
},1000);
getMainTaskDispatcher().delayDispatch(new Runnable() {
       @Override
       public void run() {

        }
},1000);

通过字面意思大体理解到 TaskDispatcher 是一个任务分发,结合前面getUI 和 getMain 那我基本可以理解为这是一个在主线和视图线的多任务处理机制,毫无疑问,我可以通过以上方法切换到主线程, 通过源码可以看到,还有其他方法也会返回 任务方法,作用于可看下其他博主的文章,还是比较明了的 传送门

如果你的源码里没有 Main 和 UI 那可以看下当前的API版本是否为6,这里我为了适配更多设备,以及能通过Java开发,在项目创建时选择了 API 6 作为开发 具体如下 传送门

在这里插入图片描述

以上是我在实战中使用的延迟操作处理,
那么在鸿蒙中,我想要实现定时操作该如何处理呢

  1. 使用Timer定时器(不使用时及时销毁) 如下:
 //创建定时器Timer
Timer mTimer = new Timer();
//开启定时
mTimer.schedule(new TimerTask() {
      @Override
      public void run() {
      
       }
 },500,1000);
//取消定时器
mTimer.cancel();
  1. 上述 Timer 适合相对固定的定时逻辑,项目中我使用到了类似于 一秒一次定时,当到达规定数量之后在五秒开始定时

在安卓中可以通过 Handler 实现

        //创建Handler
        Handler handler = new Handler();
        //直接发送
        handler.post(mQuery);
        //延迟发送
        handler.postDelayed(mQuery, 1000);
        //清除消息
        handler.removeCallbacks(mQuery);
    Runnable mQuery = new Runnable() {

        @Override
        public void run() {
            handler.postDelayed(mQuery,5000);
        }
    };

那么鸿蒙中该如何处理呢,我是这样处理的:

        //发送延迟消息
        eventHandler.sendEvent(1,300);
        //移除所有消息
        eventHandler.removeAllEvent();
    //创建EventHandler通讯处理器
    private EventHandler eventHandler = new EventHandler(EventRunner.create()){
        @Override
        protected void processEvent(InnerEvent event) {
            super.processEvent(event);
            eventHandler.sendEvent(1,5000);

        }
    };

这个EventHandler是个啥捏,(复制来的)EventHandler是HarmonyOS用于处理线程间通信的一种机制,可以通过EventRunner创建新线程,将耗时的操作放到新线程上执行。这样既不阻塞原来的线程,任务又可以得到合理的处理。

回到上面的代码 eventHandler.sendEvent(1,300); 后面 300 我可以理解是时间,前面这个 1 是什么玩意

再看源码前,我们先看下接收回调里面的参数 InnerEvent

在这里插入图片描述

在看下sendEvent源码:

在这里插入图片描述

那应该就是正常我要传回调里面的 InnerEvent 数据类,但是我要人性化一点,你可以只传一个 eventId 给我,我在源码里面给你塞上数据,因为我就要 eventId 来区分哪里传来的消息(这里我是统一处理的,所以随便写一个凑个整),这里又类似于 安卓的 EventBus,妙啊~~~~~

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

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

相关文章

C#,数值计算——积分方程与逆理论Fred2的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public abstract class Fred2 { public readonly double a; public readonly double b; public readonly int n; public double[] t; public double[] f; …

ABBYY16最新pdf文档转换图片、Word、Excel和PPT工具

欢迎来到 ABBYY 软件下载中心,FineReader PDF使专业人员能够最大程度地提高数字工作场所的效率。帮助信息工作者轻松地在同一工作流程中对各种文档进行数字化、检索、编辑、加密、共享和协作。 可以对pdf文档进行各种格式转换,任意转换为图片、Word、Ex…

代码版本控制工具GitLab :从安装到使用一步到位

一、GitLab 是什么? 如果听说过 Git 或者 GitHub,那么 GitLab 你一定也听说过。GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。简单理解:GitLab 类似私人版 …

Linux高性能服务器编程——ch12笔记

第12章 高性能I/O框架库Libevent 12.1 I/O框架库概述 基于Reactor模式的I/O框架库包含: 1)句柄:与事件源绑定(I/O事件、信号和定时事件)。当内核检测到就绪事件时,通过句柄来通知应用程序这一事件。I/O事件…

多线程---线程安全的集合类

文章目录 多线程环境使用数组synchronizedListCopyOnWriteArrayList 多线程环境使用队列多线程环境使用哈希表HashTableConcurrentHashMapHashTable VS HashMap VS ConcurrentHashMap 我们原先学习过的集合类,大部分都是线程不安全的。只有Vector、Stack、HashTable…

智能井盖传感器有哪些?万宾科技智能井盖效果

在城市治理过程之中,小小的井盖却成为影响民生的一个重要方面,因为井盖一旦出现问题,会严重影响市民的生命安全,并且传统的井盖一般都会采用人工巡检的方式,这就导致了巡检的难度较大,从而不能对城市各个角…

Hdmi接口与XAPP460

之前写过VGA,其实HDMI也写过,但是没记笔记。 VGA时序 VGA Signal Timing (tinyvga.com) 介绍 规范: 小结: VGA像素编码以后通过差分对端口以十倍像素时钟的速率地串行发送。 官方例程 HDMI编码器 来自xaap460的编码器 // //…

Python Django 之模板继承详解(extends)

文章目录 1 概述1.1 目的1.2 标签:block、extends1.3 目录结构 2 templates 目录2.1 base.html:父页面2.2 login.html:子页面 3 其它代码3.1 settings.py3.2 views.py3.3 urls.py 1 概述 1.1 目的 模板继承 和 类继承 的目的是一样的&#…

机器人仿真-gazebo学习笔记(1)前期准备

1.更新gazebo到gazebo11 1)查看我们的gazebo插件(我这里已经是gazebo11了,但对于ubuntu18.04的同学来说应该是gazebo9) dpkg -l | grep gazebo 2)卸载gazebo9的插件 sudo apt-get purge gazebo9 gazebo9-common gazebo9-plugin-base libga…

【Java 进阶篇】Java Response 路径详解

在Java Web开发中,处理HTTP响应的路径是一个重要的概念。了解如何正确处理和管理路径对于构建健壮的Web应用程序至关重要。本篇博客将详细介绍Java中的HTTP响应路径,包括路径的组成、相对路径和绝对路径的区别、如何构建和处理路径,以及路径在…

MySQL基础教程下

MySQL 约束 约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 约束描述关键字非空不能为nullnot null唯一约束唯一unique主键非空唯一primary key默认默认值default检查约束满足一个条件chec…

铭控传感数字温度变送器丨远传温度变送器在工业中的助您精准测量

秋季的森林被染成了彩色的,地上满是落叶和一些颗粒饱满的果实。一说起栗子,最令人念念不忘的当属刚出锅的糖炒栗子,栗子的外壳在糖类与高温作用下一点点发生非酶褐变,偶尔有栗子外壳破裂的声音,听着心都跟着颤了一下。…

SIT3088E3.0V~5.5V 供电,ESD 15kV HBM,256 节点,14Mbps 半双工 RS485/RS422 收发器

SIT3088E 是一款 3.0V~5.5V 宽电源供电、总线端口 ESD 保护能力 HBM 达到 15kV 以上、总 线耐压范围达到 15V 、半双工、低功耗,功能完全满足 TIA/EIA-485 标准要求的 RS-485 收发器。 SIT3088E 包括一个驱动器和一个接收器,两者均可独立…

NeurIPS 2023 Spotlight | 探索不变学习中的充分必要因果

©PaperWeekly 原创 作者 | 杨梦月 单位 | 伦敦大学学院 研究方向 | 因果推断 NeurIPS 2023 接收的 Spotlight 论文“Invariant Learning via Sufficient and Necessary Cause”提出了一种在不变学习当中学习充分必要因果的解决方案。其能够在从数据中寻找不变表征的基础上…

阿里云服务器ECS经济型e实例2核2G3M带宽优惠价格99元一年

2023阿里云服务器双11优惠价格99元一年经济型e实例,并且续费不涨价,云服务器ECS-经济型e实例2核2G配置、3M带宽、40G ESSD entry系统盘优惠价99元一年,原价956.64元/年,可用于中小型网站建设、开发测试、小程序或app搭建&#xff…

TRS 2023 | Spurs in Millimeter-Wave FMCW Radar System-on-Chip

原始笔记链接: https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486779&idx1&snc75171844595150abc48d2dd59e7255f&chksmcf51bfc2f82636d4e3f9c8526d0f25df1bea5496d9945d1e963961fea8c8fd630e7670b99afb#rd ↑ \uparrow ↑ 打开上述链接即可阅读全文…

文件操作---IO

文章目录 什么是文件?文件的路径文件的系统操作文件的内容操作面向字节流面向字节流的读操作(InputStream)面向字节流的写操作(OutputStream) 面向字符流面向字符流的读操作(Reader)面向字符流的…

【数智化人物展】途牛旅游网副总裁王树柏:人性化深耕,数智化赋能,合力共促企业可持续发展...

王树柏 本文由途牛旅游网副总裁王树柏投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字经济时代下,科技与信息的红利快速释放。“数智化”是这个时代所有企业都要面对的大趋势、大机遇。“数…

mybatis条件构造器(加强版CURD)

文章目录 1.Wrapper介绍2.QueryWrapper3.UpdateWrapper4.condition5.LambdaQueryWrapper6.LambdaUpdateWrapper 1.Wrapper介绍 Wrapper : 条件构造抽象类,最顶端父类 AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件 …

ByteBuffer的原理和使用详解

ByteBuffer是字节缓冲区,主要用户读取和缓存字节数据,多用于网络编程,原生的类,存在不好用,Netty采用自己的ByteBuff,对其进行了改进 1.ByteBuffer的2种创建方式 1.ByteBuffer buf ByteBuffer.allocate(i…