HarmonyOS应用开发实战:猫猫大作战-EventHub 事件总线

📅 2026/7/30 3:35:40 👁️ 阅读次数 📝 编程学习
HarmonyOS应用开发实战:猫猫大作战-EventHub 事件总线

前言

EventHub是 HarmonyOS 的事件总线机制,用于组件或模块之间的松耦合通信。在「猫猫大作战」中,EventHub 用于音效播放得分变更游戏状态切换等跨组件通知。

一、EventHub 基础

import{EventHub}from'@kit.ArkUI';// 创建 EventHubconsteventHub=newEventHub();// 订阅事件eventHub.on('scoreChanged',(score:number)=>{console.info(`得分更新:${score}`);// 更新 UI 等});// 发布事件eventHub.emit('scoreChanged',2450);

二、游戏中的应用

// 音效管理模块 — 订阅事件classSFXService{constructor(hub:EventHub){hub.on('playMerge',()=>this.play('merge'));hub.on('playLevelUp',()=>this.play('level_up'));hub.on('playGameOver',()=>this.play('game_over'));hub.on('playButton',()=>this.play('button'));}privateplay(name:string):void{console.info(`播放音效:${name}`);}}// 游戏引擎 — 发布事件classGameEngine{privatehub:EventHub;constructor(hub:EventHub){this.hub=hub;}onMerge():void{this.hub.emit('playMerge');}onGameOver():void{this.hub.emit('playGameOver');}}

三、EventHub vs @State

特性EventHub@State
通信范围任意模块组件树
耦合度低(松耦合)中(父子依赖)
数据流单向事件双向绑定
调试较难追踪易追踪
适用场景跨模块通知UI 状态同步

四、最佳实践

  1. 事件命名规范playMergestateChanged动词+名词
  2. 订阅在初始化aboutToAppear时订阅
  3. 取消订阅hub.off('eventName')防内存泄漏
  4. 不传递复杂对象:只传递必要的数据参数

五、事件列表

事件名数据触发时机
playMerge合并时
playLevelUp等级升级时
playGameOver得分结束时
scoreChanged得分得分变化
stateChanged状态状态切换

总结

EventHub 实现跨模块的松耦合事件通信,适合音效播放等全局通知。核心要点:hub.on()订阅、hub.emit()发布、 注意取消订阅防泄漏

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • EventHub 官方文档
  • 第 107 篇:@Extend
  • 第 109 篇:startAbility
  • 第 110 篇:startByType