# 分布式对象用户手册 分布式数据对象管理框架是一款面向对象的内存数据管理框架,向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力,同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。 ## 基本概念 分布式数据对象提供JS接口,让开发者能以使用本地对象的方式使用分布式对象。 ## 约束与限制 • 不同设备间只有相同bundleName的应用才能直接同步 • 不建议创建过多分布式对象,每个分布式对象将占用100-150KB内存 • 每个对象大小不超过500KB • 支持JS接口间的互通,与其他语言不互通。 | 类型名称 | 类型描述 | | ----------- | ----------------------------------------- | | number | 数字 | | string | 字符串 | | boolean | 布尔 | ## 开发指导 ### 接口说明 #### 引用分布式对象头文件 ``` import distributedObject from '@ohos.data.distributedDataObject' ``` #### 接口 | 接口名称 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | function createDistributedObject(source: object): DistributedObject; | 创建分布式对象
source中指定分布式对象中的属性
返回值是创建出的分布式对象,接口见DistrubutedObject | | function genSessionId(): string; | 随机创建sessionId
返回值是随机创建的sessionId | #### 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为可选参数,不设置表示删除该对象所有变更监听 | ## • 开发步骤 #### 1.引入接口 ``` import distributedObject from '@ohos.data.distributedDataObject' ``` #### 2.创建对象 ```c // 创建对象,对象包含三个属性,name,age和isVis var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false}); ``` #### 3.加入同步组网 发起方 ``` g_object.setSessionId(distributedObject.genSessionId()); //将生成的g_object.__sessionId通过Intent传到对端设备 ``` 被拉起方 ``` //获取Intent中的sessionId g_object.setSessionId(sessionId); ``` #### 4.监听对象变更 ```c changeCallback : function (sessionId, changeData) { console.info("change" + sessionId + " " + this.response); if (changeData != null && changeData != undefined) { changeData.forEach(element => { console.info("changed !" + element + " " + g_object[element]); }); } } g_object.on("change", this.changeCallback); ``` #### 4.修改对象属性 ```c g_object.name = "jack"; g_object.age = 19; g_object.isVis = false; // 对端设备收到change回调,fields为name,age和isVis ``` #### 5.访问对象 ```c console.info("name " + g_object["name"]); //访问到的是组网内最新数据 ``` #### 6.退出同步组网 ```c g_object.setSessionId(""); ```