HarmonyOS NEXT 应用元服务开发-分布式数据对象迁移数据权限与基础数据

HarmonyOS NEXT 应用元服务开发-分布式数据对象迁移数据权限与基础数据

IT资讯 2025-08-04 16:08:14 3小时前

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-itzhijia&ha_sourceId=89000249

使用分布式数据对象迁移数据,当需要迁移的数据较大(100KB 以上)或需要迁移文件时,可以使用分布式数据对象。原理与接口说明详见分布式数据对象跨设备数据同步。

‎说明:自 API 12 起,由于直接使用跨设备文件访问实现文件的迁移,难以获取文件同步完成的时间。为了保证更高的成功率,文件的迁移不建议继续通过该方式实现,推荐使用分布式数据对象携带资产的方式。开发者此前通过跨设备文件访问实现的文件迁移依然生效。

‎一、申请权限

‎说明,自 API 12 起,无需申请 ohos.permission.DISTRIBUTED_DATASYNC 权限。

‎API 11 及以前版本,需要执行如下操作。

‎1.声明 ohos.permission.DISTRIBUTED_DATASYNC 权限。

‎2.由于 ohos.permission.DISTRIBUTED_DATASYNC 权限需要用户授权,应用需在首次启动、或进入接续页面时弹窗向用户申请授权。

‎二、基础数据迁移

‎使用分布式数据对象,与上述开发步骤类似,需要在源端 onContinue () 接口中进行数据保存,并在对端的 onCreate ()/onNewWant () 接口中进行数据恢复。

‎在源端 UIAbility 的 onContinue () 接口中创建分布式数据对象并保存数据,执行流程如下:

在 onContinue () 接口中使用 create () 接口创建分布式数据对象,将所要迁移的数据填充到分布式数据对象数据中。

‎调用 genSessionId () 接口生成数据对象组网 id,并使用该 id 调用 setSessionId () 加入组网,激活分布式数据对象。

‎使用 save () 接口将已激活的分布式数据对象持久化,确保源端退出后对端依然可以获取到数据。

‎将生成的 sessionId 通过 want 传递到对端,供对端激活同步使用。

‎说明,分布式数据对象需要先激活,再持久化,因此必须在调用 setSessionId () 后再调用 save () 接口。对于源端迁移后需要退出的应用,为了防止数据未保存完成应用就退出,应采用 await 的方式等待 save () 接口执行完毕。从 API 12 起,onContinue () 接口提供了 async 版本供该场景使用。

‎当前,wantParams 中“sessionId”字段在迁移流程中被系统占用,建议开发者在 wantParams 中定义其他 key 值存储该分布式数据对象生成的 id,避免数据异常。

‎示例代码如下:

在对端 UIAbility 的 onCreate ()/onNewWant () 中,通过加入与源端一致的分布式数据对象组网进行数据恢复。

‎创建空的分布式数据对象,用于接收恢复的数据;

‎从 want 中读取分布式数据对象组网 id;

‎注册 on () 接口监听数据变更。在收到 status 为 restore 的事件的回调中,实现数据恢复完毕时需要进行的业务操作。

‎调用 setSessionId () 加入组网,激活分布式数据对象。

‎说明,对端加入组网的分布式数据对象不能为临时变量,因为在分布式数据对象 on () 接口为异步回调,可能在 onCreate ()/onNewWant () 执行结束后才执行,临时变量被释放可能导致空指针异常。可以使用类成员变量避免该问题。对端用于创建分布式数据对象的 Object,其属性应在激活分布式数据对象前置为 undefined,否则会导致新数据加入组网后覆盖源端数据,数据恢复失败。应当在激活分布式数据对象之前,调用分布式数据对象的 on () 接口进行注册监听,防止错过 restore 事件导致数据恢复失败。

‎示例代码如下:

本文主要引用 HarmonyOS 官方文档。(文章转载自 51CTO,作者鸿蒙时代)

文章版权声明:除非注明,否则均为网络转载文章,转载或复制请以超链接形式并注明出处。

最新资讯

热门资讯