发布时间:2026/7/23 18:02:17
鸿蒙三方库 | harmony-utils之EmitterUtil线程间通信详解 前言线程间通信是并发编程的基础能力HarmonyOS提供了Emitter机制用于线程间事件传递。pura/harmony-utils的EmitterUtil封装了Emitter的订阅和发送方法简化了线程间通信的实现。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、EmitterUtil核心APIEmitterUtil提供了以下线程间通信方法方法说明参数使用场景on(eventId, callback)订阅事件eventId, callback事件监听off(eventId, callback)取消订阅eventId, callback释放资源emit(eventId, data)发送事件eventId, data事件触发1.1 核心特性简洁易用封装复杂API为一行调用降低使用门槛类型安全完整的TypeScript类型定义编译期即可发现错误异常处理内置异常捕获机制避免运行时崩溃线程安全支持跨线程事件传递1.2 事件ID管理建议范围说明示例1000-1999用户交互事件点击、长按2000-2999数据更新事件数据刷新、同步3000-3999系统状态事件网络变化、电量变化二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 订阅事件import{EmitterUtil}frompura/harmony-utils;privateeventCallback(data){this.result收到事件:${JSON.stringify(data)};};aboutToAppear(){EmitterUtil.on(1001,this.eventCallback);}aboutToDisappear(){EmitterUtil.off(1001,this.eventCallback);}2.3 发送事件Button(发送事件).width(100%).onClick((){try{EmitterUtil.emit(1001,{message:Hello from Emitter!});this.result事件已发送 ;}catch(e){this.result异常: e;}})三、完整页面示例import{EmitterUtil}frompura/harmony-utils;EntryComponentstruct EmitterDemo{Stateresult:string;aboutToAppear(){EmitterUtil.on(1001,(data){this.result收到:${JSON.stringify(data)};});}aboutToDisappear(){EmitterUtil.off(1001);}build(){Column({space:12}){Button(发送事件).width(100%).onClick((){EmitterUtil.emit(1001,{msg:Hello});});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 事件总线import{EmitterUtil}frompura/harmony-utils;classEventBus{staticreadonlyEVENTS{USER_LOGIN:1001,DATA_REFRESH:2001,NETWORK_CHANGE:3001};staticon(eventId:number,callback:Function):void{EmitterUtil.on(eventId,callback);}staticemit(eventId:number,data?:Object):void{EmitterUtil.emit(eventId,data);}staticoff(eventId:number,callback?:Function):void{EmitterUtil.off(eventId,callback);}}4.2 跨组件通信EmitterUtil.emit(2001,{action:refresh,target:userList});五、注意事项事件ID建议使用常量定义事件ID避免硬编码取消订阅页面销毁时务必取消订阅避免内存泄漏回调引用订阅和取消需使用同一回调引用初始化依赖使用前需确保AppUtil.init()已调用事件数据事件数据应尽量精简避免传递大对象六、常见问题Q1: 事件发送后回调不触发检查事件ID是否一致回调是否正确注册。Q2: 多次订阅同一事件会触发多次吗是的每个订阅的回调都会触发注意避免重复订阅。Q3: 可以跨Ability通信吗EmitterUtil支持同进程内的线程间通信跨进程需使用其他方案。Q4: 事件数据大小有限制吗建议事件数据不超过10KB大数据建议通过文件或数据库传递。总结EmitterUtil的线程间通信方法为组件间和线程间的事件传递提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用事件总线模式实现松耦合的组件通信。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。

相关新闻

2026/7/23 18:02:17

2025年机器学习十大算法全景解析:从理论到实践的深度指南

在人工智能驱动的2025年,机器学习算法已成为科技革命的核心引擎。从自动驾驶的实时决策到医疗诊断的精准预测,从金融风控的智能分析到个性化推荐的千人千面,十大经典算法持续进化,构建起智能社会的数字基石。在人工智能驱动的2025…

2026/7/23 18:02:17

OpenWrt软路由空间扩容

文章目录 预备知识 OpenWrt系统固件分类 EXT4固件扩容方式 新建分区扩容 操作步骤 直接扩容 操作步骤 SQUASHFS固件扩容方式 新建分区扩容 直接扩容 EFI引导固件的额外操作 参考 预备知识 OpenWrt系统固件分类 EXT4固件 固件包名称中包含有ext4关键字,可以参考固件分类关键字…

2026/7/23 18:02:17

关于在VM虚拟机下,安装OpenWrt软路由,所遇错误及解决方法。

首先是去阿里的openwrt源下载的镜像为img格式,vm虚拟无法识别,需要转换为iso格式或者vmdk格式,用软碟通转换iso格式失败,于是准备转换成vmdk格式,网上大部分采用starwindconverter软件,但是最新的版本老是报…

2026/7/23 19:27:22

Python毕设项目:基于 Python 的智能期货模拟交易分析系统 虚拟资金期货交易演练管理平台 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 19:27:22

不容错过的思维导图——XMind2025(全功能版)

(获取方式在文末)小伙伴们大家是否接触过思维导图软件呢,如果有那一定听说过XMind吧,今天我来为大家介绍一下,一起来看一下吧。软件介绍一、AI 核心功能革新一句话总结:写 PPT 前 10 分钟就能画出一张思维导…

2026/7/23 19:27:22

2026大模型智能体(Agent)面试全攻略与架构解析

1. 2026大模型智能体(Agent)面试全攻略:从入门到精通作为一名在大模型和智能体领域摸爬滚打多年的从业者,我见证了从早期简单的聊天机器人到如今具备复杂推理能力的智能体Agent的演进过程。2026年的大模型智能体面试已经形成了一套完整的考察体系&#x…

2026/7/23 19:22:22

PHP学习笔记

PHP基础1、PHP介绍PHP是一种运行在服务器端的HTML脚本/编程语言,主要作用是编写动态网页。PHP的底层语言是C语言,与Python类似,PHP的很多功能是由加载拓展实现的。2、PHP环境搭建1、下载PHPPHP的目录结构主要有:PHP解释器、PHP拓展…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/23 0:01:10

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/22 21:00:12

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…