HarmonyOS实战:打造极简HEventBus事件通知
前言 事件通知在日常开发中十分重要,不同页面之间的事件通信都会用到事件通知,作为 Android 开发的小伙伴相信都用过 EventBus,LiveDataEventBus 等事件通信工具。鸿蒙开发中也同样需要一个页面之间通信等工具,本篇文章教你在鸿蒙开发中如何实现一个 HEventBus,建议点赞收藏! 需求分析 ● 全局只存在唯一实例。 ● 支持事件注册,反注册。 ● 支持一次发送,多处接收。
技术实现 单例实现 在鸿蒙中使用创建静态对象实现单例,首先定义一个私有的静态成员变量defaultInstance �,提供一个静态方法 getDault ()方法返回单例对象。 private static defaultInstance: HEventBus
static getDefault(): HEventBus { if (HEventBus.defaultInstance == undefined) { HEventBus.defaultInstance = new HEventBus(); } return HEventBus.defaultInstance } 事件注册与反注册
- 事件注册,首先提供一个字符串参数为 eventName,用来区分不同的消息事件。然后提供一个 eventId 用来绑定当前页面,如果不同页面接收一个相同的事件通知,不使用 eventId 绑定页面,就会出现一个页面反注册 HEvent,就会导致其他页面接收不到事件通知,在 Android 中一般使用 this 作为当前页面的标识,也就是当前的 Activity ,Fragment 或 View。而在鸿蒙中只有Component,而且无法使用 this 代表当前页面。这个时候就要使用一个唯一的 id 作为事件的唯一标识。这个 id 十分关键,这里使用this.getUniqueId()作为当前页面的唯一标识。第三个参数就是事件 ESObject,接收事件传递的参数。 register(eventName: string, eventId: number | string, method: ESObject) { let result = this.eventMessages.filter((model) => { return model.eventName == eventName }) if (result.length == 0) { let message = new HEventBusMessage() message.eventName = eventName this.eventMessages.push(message) } this.eventMessages.forEach((message) => { if (message.eventName == eventName) { let model = new HEventBusModel() model.eventId = eventId model.method = method message.models.push(model) } }) }
- 反注册,反注册就比较简单了,通过 forEach 循环过滤出事件名称与事件 id 不同的消息,直接返回,此时就将当前注册从数组中移除了。 unregister(eventName: string, eventId: number | string) { this.eventMessages.forEach((message)=>{ if (message.eventName == eventName) { message.models = message.models.filter((model)=>{ return model.eventId != eventId }) } }) }
�3.消息发送,通过数组遍历找到事件名称相同的事件发送,参数为 Object。 post(eventName: string,arg: Object){ this.eventMessages.forEach((message)=>{ if (message.eventName == eventName) { message.models.forEach((model)=>{ model.method(arg) }) } }) } 4.清除消息,直接将数组清空即可。 � clear(){ this.eventMessages = [] } 总结 事件通知在实际开发中十分重要,使用场景也比较多,根据实际开发场景使用事件通知 HEventBus,由于篇幅限制本文只提供了部分代码,完整代码请联系作者,已经学会了的小伙伴,赶快动手试试吧。
- 0回答
- 0粉丝
- 0关注
- OpenHarmony5.0应用开发极简入门教程(一、开篇)
- 《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》
- HarmonyOS Web组件事件处理实战【1】
- HarmonyOS Web组件事件处理实战【2】
- (六六)HarmonyOS Design 的通知与消息设计
- harmony-utils之NotificationUtil,通知工具类
- 鸿蒙开发:Navigation路由组件使用由繁入简
- 公共事件
- 进程内事件
- 公共事件简介
- 鸿蒙-做一个简版的富文本解析控件
- 鸿蒙运动开发实战:打造 Keep 式轨迹播放效果
- 鸿蒙开发:事件订阅EventHub
- [HarmonyOS NEXT 实战案例六:List系列] 垂直列表组件实战:打造高效联系人列表 基础篇
- 141.[HarmonyOS NEXT 实战案例九:List系列] 分组列表组件实战:打造分类设置菜单 基础篇