鸿蒙跨设备协同开发08——使用分布式数据对象接续应用

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。

1、前 言

本文是基于鸿蒙跨设备协同开发07——动态控制应用接续的进一步讨论。

我们在鸿蒙跨设备协同开发06——应用接续中有提到:

  • 为了接续体验,在onContinue回调中使用wantParam传输的数据需要控制在100KB以下(大数据量使用分布式数据对象进行同步)

当我们遇到需要迁移的数据大于100KB时,则需要分布式数据对象进行同步了。

需要注意:

如果是API11及之前版本,实现分布式数据对象同步功能时,需要申请 ohos.permission.DISTRIBUTED_DATASYNC 权限,如果是API 12及以上时,无需申请此权限

2、分布式数据对象介绍

分布式数据对象提供管理基本数据对象的相关能力,包括创建、查询、删除、修改、订阅等;同时支持相同应用多设备间的分布式数据对象协同能力。

分布式数据对象由 @ohos.data.distributedDataObject 模块提供能力。导入模块代码如下:

import { distributedDataObject } from '@kit.ArkData';

核心的API有:

// 创建一个分布式数据对象create(context: Context, source: object): DataObject// 随机创建一个sessionIdgenSessionId(): string

创建一个分布式数据对象和随机创建一个sessionId示例如下:

// 创建一个分布式数据对象// 导入模块import { UIAbility } from '@kit.AbilityKit';import { BusinessError } from '@kit.BasicServicesKit';import { window } from '@kit.ArkUI';let g_object: distributedDataObject.DataObject|null = null;class SourceObject {
  
      name: string    age: number    isVis: boolean    constructor(name: string, age: number, isVis: boolean) {
  
          this.name = name        this.age = age        this.isVis = isVis    }}class EntryAbility extends UIAbility {
  
      onWindowStageCreate(windowStage: window.WindowStage) {
  
          let source: SourceObject = new SourceObject("jack", 18, false);        // 创建一个分布式数据对象        g_object = distributedDataObject.create(this.context, source);    }}// 创建一个随机sessionIdlet sessionId: string = distributedDataObject.genSessionId();

分布式数据对象的使用核心还是在于DataObject,DataObject表示一个分布式数据对象。它主要的API有:

// 设置sessionId,可信组网中有多个设备处于协同状态时,如果多个设备间的分布式对象设置为同一个sessionId,就能自动同步。// callback接口和Promise接口setSessionId(sessionId: string, callback: AsyncCallback<void>): voidsetSessionId(sessionId?: string): Promise<void>// 退出所有已加入的sessionsetSessionId(callback: AsyncCallback<void>): void// 监听/取消监听 分布式数据对象的数据变更。on(type: 'change', callback: (sessionId: string, fields: Array<string>) => void): voidoff(type: 'change', callback?: (sessionId: string, fields: Array<string>) => void): void// 监听/取消监听 分布式数据对象的上下线。on(type: 'status', callback: (sessionId: string, networkId: string, status: 'online' | 'offline' ) => void): voidoff(type: 'status', callback?:(sessionId: string, networkId: string, status: 'online' | 'offline') => void): void// 保存分布式数据对象(callback回调和Promise版本)/* 对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。 有以下几种情况时,保存的数据将会被释放: - 存储时间超过24小时。 - 应用卸载。 - 成功恢复数据之后。  【deviceId为 local 时,表示存储在本地设备】 */save(deviceId: string, callback: AsyncCallback<SaveSuccessResponse>): voidsave(deviceId: string): Promise<SaveSuccessResponse></
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值