鸿蒙三方库 | harmony-utils之EmitterUtil线程间通信详解
📅 2026/7/23 18:01:37
👁️ 次浏览
前言线程间通信是并发编程的基础能力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工具库更多功能请参考官方文档与后续系列文章。
1. 为什么模型微调是大模型实战的杀手锏在大模型应用开发中,我们常常会遇到这样的困境:一个表现优秀的Base模型在实际业务场景中却无法达到预期效果。就像给一位博学的教授布置具体工作任务,虽然他知识渊博,但缺乏特定领域的经验&…
📅 2026/7/23 18:00:37
1. 航拍车辆检测数据集概述这个包含154张航拍图像的车辆检测数据集,是我们在智慧城市项目中积累的实战素材。不同于常规地面拍摄的交通监控画面,航拍视角能捕捉更大范围的车辆分布和运动轨迹,特别适合需要宏观分析的应用场景。去年我们在某大…
📅 2026/7/23 18:00:37
2026 年,Token 经济正以前所未有的速度重塑 AI 产业格局。据中泰证券报告数据,中国日均 Token 调用量从 2024 年初的 1000 亿增至 2025 年底的 100 万亿、2026 年初已达 140 万亿,两年增长超千倍;IDC 预测全球年度 Token 消耗量将…
📅 2026/7/23 18:00:37
本文关键词:geo sure安卓版说实话,以前我也觉得搞这些虚拟定位的事儿挺邪乎的,总觉得手机要是改了GPS,那不得跟闹鬼似的。直到上周,为了帮家里老舅抢个那个热门景点的门票,我折腾了整整两天,头发都快掉光了。最后发现,还是得靠工具说话。今天不整那些虚头巴脑的技术原理…
📅 2026/7/23 19:13:01
面向TwinCAT PLCPLC项目,一级菜单目录点击Scope->二级子目录Target Browser弹出子窗口双击501:TCNC.NcTaskSaf控制器建议只允许读取这些变量
📅 2026/7/23 19:13:11
1. AI Agent如何重塑程序员的工作场景最近半年,我团队里三位资深开发者的日常工作发生了微妙变化:代码审查时间减少了40%,但交付质量反而提升了15%。这个反直觉现象的背后,是AI Agent技术正在对编程工作流进行静默但深度的重构。不…
📅 2026/7/23 19:13:11
VCSA 8.0升级到8.0U2后弹出缺少补丁更新告警,属于版本升级后的典型残留合规告警,标准解决方案:登录Broadcom官方支持门户下载VCSA 8.0U2最新累积补丁包,通过vSphere LCM生命周期管理器执行集群/主机批量补丁更新,同步修…
📅 2026/7/23 19:13:11
Linux命令-sendmail(邮件传输代理)快速参考基本语法安装 sendmail基本用法常用选项配置 sendmail发送邮件脚本示例查看邮件队列故障排查总结快速参考
sendmail 是经典的邮件传输代理(MTA)。它负责在服务器之间路由和传输电子邮件…
📅 2026/7/23 19:13:11
1. 项目概述:工业级跨平台视觉检测方案这个项目展示了如何利用C# .NET 8和YOLOv12-n构建一个真正工业级的跨平台视觉检测系统。不同于常见的演示级项目,我们实现了Windows、Linux和ARM架构(包括树莓派5)的全兼容支持,特…
📅 2026/7/23 19:13:11
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/23 7:06:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/23 17:07:28
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50