OpenHarmony——分布式数据对象之功能实践 原创 精华
作者:井隆
分布式数据对象之功能实践
分布式数据对象管理框架是一款面向对象的内存数据管理框架,向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力,同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。
1 基本概念
分布式数据对象提供JS接口,让开发者能以使用本地对象的方式使用分布式对象。
2 运作示意图
3 约束与限制
• 不同设备间只有相同bundleName的应用才能直接同步
• 不建议创建过多分布式对象,每个分布式对象将占用100-150KB内存
• 每个对象大小不超过500KB
• 支持JS接口间的互通,与其他语言不互通。
类型名称 | 类型描述 |
---|---|
number | 数字 |
string | 字符串 |
boolean | 布尔 |
4 开发指导
4.1 接口说明
4.1.1 引用分布式对象头文件
4.1.2 接口
接口名称 | 描述 |
---|---|
function createDistributedObject(source: object): DistributedObject; | 创建分布式对象 source中指定分布式对象中的属性 返回值是创建出的分布式对象,接口见DistrubutedObject |
function genSessionId(): string; | 随机创建sessionId 返回值是随机创建的sessionId |
4.1.3 DistrubutedObject
接口名称 | 描述 |
---|---|
setSessionId(sessionId?: string): boolean; | 设置同步的sessionId,可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步 sessionId是指定的sessionId,如果要退出分布式组网,设置为“”或不设置均可 返回值是操作结果,true标识设置session成功 |
on(type: ‘change’, callback: Callback<{ sessionId: string, fields: Array }>): void; | 监听对象的变更 type固定为’change’ callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,fields标识对象变更的属性名 |
off(type: ‘change’, callback?: Callback<{ sessionId: string, fields: Array } | 删除对象的变更监听 type固定为’change’ callback为可选参数,不设置表示删除该对象所有变更监听 |
on(type: ‘status’, callback: Callback<{ sessionId: string, networkId: string, status: ‘online’ | ‘offline’ }>): void | 监听对象的变更 type固定为’status’ callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,networkId标识对象设备的networkId,status标识对象为’online’(上线)或’offline’(下线)的状态 |
off(type: ‘status’, callback?: Callback<{ sessionId: string, deviceId: string, status: ‘online’ | ‘offline’ }>): void | 删除对象的变更监听 type固定为’change’ callback为可选参数,不设置表示删除该对象所有上下线监听 |
5 开发步骤
5.1 引入接口
5.2 创建对象
**说明:**构造分布式对象时,新增了默认SESSION_ID属性,并为各属性增加了set和get方法,其构造方法如下所示:
5.3 加入同步组网
- 发起方
用distributedObject.genSessionId()方法生成随机字符串,并设置为对象的__sessionId属性的值
**说明:**setSessionId不仅设置了SESSION_ID属性的值,也重新打包了对象,增加了该SESSION_ID对应同步组网的内容,具体方法如下:
- 被拉起方
发起方将sessionId通过Intent传到对端设备,被拉起方获取Intent中的sessionId,执行setSessionId加入同步组网完成数据同步。
5.4 监听对象变更
开启change监听,当同步组网内对象属性value发生变化时,触发用户自定义回调changeCallback。
5.5 修改对象属性
说明: 针对复杂类型的数据修改,目前支持对根属性的修改,暂不支持对下级属性的修改。示例如下:
5.6 访问对象
5.7 删除监听数据变更
5.8 监听分布式对象的上下线
开启status监听,当同步组网内有对象在线状态发生变化时,触发用户自定义回调statusCallback。
5.9 删除监听分布式对象的上下线
5.10 退出同步组网
6 内部实现
6.1 主要接口
6.2 调用顺序
7 总结
通过本文的学习可了解到分布式数据对象的主要接口、大致调用方法和功能实现等。结合对应内容,可以进一步对分布式数据对象同步机制做深度学习。
下一步,
(1) 着重理解同步组网的构建原理。
(2) 着重理解同步组网内,监听change和status变化的实现。
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
通过这篇文章,对分布式的了解更清楚了
分布式子系统是OpenHarmonyOS的精髓,多谢分享!
很专业的思维导图
请教您一个问题:为什么在回调函数changeCallBack()中无法更新@State变量呢?(更新之后界面中的数据不会刷新)这是一个issue呢,还是就这么设计的?如果想要更新@State变量,有没有其它办法?非常感谢~