当前位置: 首页 > news >正文

鸿蒙 emitter 和 eventHub 的区别

在鸿蒙(HarmonyOS)开发中,EmitterEventHub是两种不同的事件通信机制,主要区别如下:


一、核心功能区别

特性EmitterEventHub
通信范围支持跨线程通信(如主线程与Worker线程)仅限线程内通信(如UIAbility内组件间通信)
事件优先级支持配置事件优先级(如IMMEDIATE、LOW)无优先级设置
订阅类型支持持续订阅(on)和单次订阅(once仅支持持续订阅(on
数据约束需封装为EventData对象,支持复杂数据类型可传递任意类型参数(...args: Object[]

二、适用场景

  • Emitter

    • 需要跨线程通信的场景(如主线程与Worker线程交互)。
    • 需要控制事件投递优先级(如高优先级事件优先处理)。
    • 与HarmonyOS的Worker能力配合使用。
  • EventHub

    • 同线程内组件间通信(如UIAbility与Page、Page与组件)。
    • 轻量级事件传递,无需复杂配置。
    • Stage模型中通过UIAbility的context.eventHub直接获取。

三、使用方式对比

1. Emitter示例
// 订阅事件(跨线程)
import { emitter } from '@kit.BasicServicesKit';// 定义事件及优先级
let event: emitter.InnerEvent = { eventId: 1, priority: emitter.EventPriority.LOW };
// 订阅事件
emitter.on(event, (eventData: emitter.EventData) => {console.info(`Received data: ${JSON.stringify(eventData)}`);
});// 发送事件(可在不同线程中调用)
let eventData: emitter.EventData = { data: { content: "Hello" } };
emitter.emit(event, eventData);

2. EventHub示例

// 在UIAbility中订阅事件(同线程)
import { UIAbility } from '@kit.AbilityKit';export default class EntryAbility extends UIAbility {onCreate() {this.context.eventHub.on('myEvent', (data: string) => {promptAction.showToast({ message: data });});}// 发送事件triggerEvent() {this.context.eventHub.emit('myEvent', 'EventHub Message');}
}

四、其他区别

  • 模型支持
    • EventHub仅支持Stage模型,通过context获取。
    • Emitter支持FA和Stage模型,且适用于Worker线程。
  • 资源消耗
    • Emitter因支持跨线程和优先级队列,资源占用较高。
    • EventHub更轻量,适合高频次、简单的通信场景。

总结建议

  • 跨线程通信或需优先级控制 → 选择Emitter
  • 同线程组件解耦简单事件传递 → 使用EventHub
http://www.dtcms.com/a/499801.html

相关文章:

  • Java中Elasticsearch完全指南:从零基础到实战应用
  • 网站开发承包合同网站地图怎么弄
  • 【算法】day7 滑动窗口+二分查找
  • Kylin Linux Advanced Server V10 (Sword)上离线安装Ansible
  • 大学生做的广告短视频网站山东省建设教育集团网站首页
  • LeetCode 面试经典 150_栈_最小栈(54_155_C++_中等)(辅助栈)
  • 西安网站建设服务商十强文明网站建设
  • 互动网站如何做做网站和做程序一样吗
  • mockpuls可以做网站吗湖南招聘信息网官网
  • 【Qt】信号与槽(Signal and Slot)- 简易计算器
  • 2.5 网口
  • 肤契:全域协议版 IV 樱花町的晨光
  • dede 建设网站做个普通的网站多少钱
  • Nivo图表库全面指南:配置与用法详解
  • 典型营销型网站有哪些惠阳住房和城乡建设局网站
  • 算法题——贪心算法
  • 安装WordPress时没生成wp-config.php的解决方法
  • MovieNet(A holistic dataset for movie understanding) :面向电影理解的多模态综合数据集与工具链
  • 如何关联网站与网站html视频网站模板
  • 触摸未来2025-10-18:生成文字的小宇宙矩阵溯源
  • TypeScript 基础语法
  • 网站建设的栏目内容是项目建设网站
  • 货物公司网站建设方案济南网站优化排名
  • 论坛网站建设视频教程沈阳专业网站建设
  • 项目1:队列的讲解(下):C++多线程队列使用
  • web自动化测试——Excel表格数据提取
  • nerfstudio使用colmap处理图像数据的小问题
  • SQL 中的 UCASE() 函数详解
  • 中国互联网协会网站爱客crm系统
  • 企业网站导航栏高度58同城最新招聘网找工作招聘信息