首页 > 其他分享 >鸿蒙跨设备协同开发08——使用分布式数据对象接续应用

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

时间:2024-10-27 20:52:03浏览次数:4  
标签:string 鸿蒙 对象 08 undefined let 数据 分布式

如果你也对鸿蒙开发感兴趣,加入“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>// 撤回保存的分布式数据对象(callback回调和Promise版本)// 如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。// 如果对象保存在其他设备,那么将删除本地设备上的数据。revokeSave(callback: AsyncCallback<RevokeSaveSuccessResponse>): voidrevokeSave(): Promise<RevokeSaveSuccessResponse>/* 绑定分布式对象中的单个资产与其对应的数据库信息,当前版本只支持分布式对象中的资产与关系型数据库的绑定。使用callback方式异步回调。 当分布式对象中包含的资产和关系型数据库中包含的资产指向同一个实体资产文件,即两个资产的Uri相同时,就会存在冲突,我们把这种资产称为融合资产。如果需要分布式数据管理进行融合资产的冲突解决,需要先进行资产的绑定。当应用退出session后,绑定关系随之消失。 */bindAssetStore(assetKey: string, bindInfo: BindInfo, callback: AsyncCallback<void>): voidbindAssetStore(assetKey: string, bindInfo: BindInfo): Promise<void>

⭐️ 以保存数据为例,示例代码如下:​​​​​​​

g_object.setSessionId("123456");g_object.save("local").then((result: distributedDataObject.SaveSuccessResponse) => {    console.info("save callback");    console.info("save sessionId " + result.sessionId);    console.info("save version " + result.version);    console.info("save deviceId " + result.deviceId);}).catch((err: BusinessError) => {    console.info("save failed, error code = " + err.code);    console.info("save failed, error message: " + err.message);});

⭐️ 以监听数据变化为例,示例代码如下:​​​​​​​

// 删除数据变更回调changeCallbackg_object.off("change", (sessionId: string, fields: Array<string>) => {    console.info("change" + sessionId);    if (g_object != null && fields != null && fields != undefined) {        for (let index: number = 0; index < fields.length; index++) {            console.info("changed !" + fields[index] + " " + g_object[fields[index]]);        }    }});// 删除所有的数据变更回调g_object.off("change");

3、使用分布式数据对象接续基础数据

使用分布式数据对象接续与普通的应用接续相似(详见之前的文章鸿蒙跨设备协同开发06——应用接续),需要在源端onContinue()接口中进行数据保存,并在对端的onCreate()/onNewWant()接口中进行数据恢复。

标签:string,鸿蒙,对象,08,undefined,let,数据,分布式
From: https://blog.csdn.net/harmonyClassRoom/article/details/143244707

相关文章

  • Hadoop分布式系统架构
    Hadoop分布式系统架构Hadoop已经非常火了,Greenplum的开源跟它也是脱不了关系的。它有着高可靠性、高扩展性、高效性、高容错性的口碑。在互联网领域有着非常广泛的运用,雅虎、Facebook、百度、淘宝、京东等都在使用Hadoop。Hadoop生态体系非常庞大,各公司基于Hadoop所实现的......
  • 鸿蒙Harmony OS Next原生开发TS基本数据类型
    鸿蒙初开,开天辟地TS语法之变量书接上文,在TS中,我们常用的数据类型有1.number表示数字,包括浮点数和整数在内leta:number=100;letb:number=-33;letc:number=2.5;console.log(a)console.log(b)console.log(c)console.log(typeofc)leta:number=100;letb:number......
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • 【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
      ......
  • 鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题
    1.TCP数据传输粘包简介在本系列的第6篇文章《鸿蒙网络编程系列6-TCP数据粘包表现及原因分析》中,我们演示了TCP数据粘包的表现,如图所示:随后解释了粘包背后的可能原因,并给出了解决TCP传输粘包问题的两种思路,第一种是指定数据包结束标志,在本系列第35篇《鸿蒙网络编程系列35......
  • 鸿蒙多环境配置(一)
    在实际开发过程中,你是否遇到了如下一些问题。项目分多套环境,如开发环境,生产环境,甚至还有灰度环境,不同的环境请求的服务器地址不一样,不同环境依赖的库也不一样,使用的三库key也不一样。测试会问开发环境的包和生产环境的包可以同时安装在手机上吗,我怎么区分哪个是生产环境的包,开发环......
  • 20222408 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1回答问题(1)杀软是如何检测出恶意代码的?①基于特征码的检测:AV软件厂商搜集最全最新的特征码库,并以此来尝试匹配文件中的一个或几个片段②启发式恶意软件检测:根据片面特征推断,包括行为(如连接恶意网站、开放端口、修改系统文件等),外观(文件签名、结构、厂商等)。③基于行......
  • 「Mac畅玩鸿蒙与硬件9」鸿蒙开发环境配置篇9 - 使用 Git 进行版本控制
    在HarmonyOS项目开发中,Git版本控制可以帮助开发者规范地管理代码变更,确保协作流程顺畅。本篇将详细介绍从创建项目、提交代码到Git远程仓库,再到修改、推送更新的完整操作流程,重点演示如何使用Git和GitHub进行身份验证和版本管理。关键词版本控制Git基础操作本地......
  • LevOJ P2081 矮人都城
    目录1.题目 1.1题目描述1.2输入输出格式1.3数据范围1.4样例2.算法标签(tag)3.题解3.1思路3.2AC代码1.题目 1.1题目描述1.2输入输出格式1.3数据范围1.4样例2.算法标签(tag)贪心,构造,数学3.题解3.1思路写这种题最关键的是什么?脑子要足够清晰!我们需要......
  • 2024-2025-1 20241408陈烨南《计算机基础与程序设计》第五周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计)这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05这个作业的目标①Pep/9虚拟机②机器语言与汇编语言③算法与伪代码④测试:黑盒,白盒作业正文本博客链接教材学......