HarmonyOS 使用FA调PA能力实现JS消息订阅功能 原创 精华
作者: 余香鑫
前言
目前JS UI框架提供的事件发布订阅功能需要在API7版本上才能使用, 为满足开发需求, 我们在JAVA侧实现消息订阅分发逻辑, 通过JS调JAVA能力将接口暴露给JS侧, 以实现消息订阅发布能力
效果展示
实现思路
1. 定义消息数据
一个消息事件包含事件类型, 携带数据, 我们先定义一个JavaBean对象表示消息数据
2. 定义接口
消息数据模型有了, 可以开始定义接口了.
-
消息订阅接口,
key
用于表示订阅者对象的标识.callback
是消息的回调接口, 我们希望订阅者只接收到自己关心的事件, 所以还需要增加一个参数subscribeEventTypes
表示关心的事件类型 -
取消订阅接口
有订阅就会有取消,key
用于表示订阅者对象的唯一标识 -
发布消息接口
发布消息接口,type
表示消息类型,data
表示携带的数据
3. JAVA侧逻辑
我们采用的是是PA调FA机制, 所以需要新建一个JAVA远程服务Ability, 目前有Server
和Internal
两种类型的服务Ability, 此处不需要考虑多进程和 生命周期问题, 所以这里使用Internal
Ability.
3.1 先创建一个类EventInternalAbility, 调用setInternalAbilityHandler
接口实现JS侧请求处理接口, 处理三种请求
3.2 处理订阅消息请求, 我们需要在此函数下处理消息订阅的事件类型和订阅对象
3.3 处理取消订阅消息请求, 此逻辑比较简单, 将标识对应的订阅对象移除即可
3.4 处理消息分发请求, 我们需要在此函数下完成消息数据解析和消息分发处理
3.5 到此我们JAVA侧的关键代码已经完成, 我们还需要在应用启动入口添加启动EventInternalAbility
服务
4. JS侧逻辑
新建event-utils.js脚本文件, 实现上述定义的接口;
JS侧的代码比较简单, 主要将入参的数据透传给JAVA侧, 逻辑比较简单, 此处不再一一讲解
- 将请求bundleName abilityName等参数抽为一个方法, 以减少重复代码
- 订阅消息
- 取消订阅
- 发布消息
总结
至此关键代码逻辑已全部完成, 总体来说流程比较简单, 主要使用JS UI框架提供的FA调PA能力, 将JAVA侧的操作能力提供给JS侧使用.
完整项目代码可以前往Gitee查看
更多原创内容请关注:中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
学习了
OpenHarmony没有办法用java