一、自由流转的形态
流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如邮件跨设备编辑、多设备协同健身、多屏游戏等分布式业务。
二、跨端迁移
在应用开发层面,跨端迁移指在A端运行的UIAbility迁移到B端上,完成迁移后,B端UIAbility继续任务,而A端UIAbility可按需决定是否退出。
三、多端协同
用户拥有的多个设备,可以作为一个整体,为用户提供比单设备更加高效、沉浸的体验,这就是多端协同场景。
四、自由流转开发框架
1、分布式软总线技术架构
2、分布式软总线核心技术
3、分布式数据管理
解决跨端数据共享问题。
4、分布式硬件
解决跨端硬件共享问题。
5、分布式任务调度
提供应用跨端迁移、多端协同能力。
6、系统抽象和交互逻辑
7、HarmonyOS提供的应用开发框架
五、自由流转应用开发
1、跨端迁移运作机制简述
1、为应用配置基础迁移功能
// src/main/resources/base/element/string.json
{"module": {// ..."abilities": [{"continuable": true, // 配置迁移能力"launchType": "singleton" // 指定启动模式(冷启动场景使用onCreate,热启动场景使用onNewWant)}],"requestPermissions": [{// 增加权限配置,允许不同设备间的数据交换"name": "ohos.permission.DISTRIBUTED_DATASYNC","reason": "$string:distributed_data_sync","usedScene": {"abilities": ["EntryAbility"],"when": "inuse"}}]}
}
2、应用状态运行时申请用户授权
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';export default class EntryAbility extends UIAbility {async checkPermissions(): Promise<void> {const permissions: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"];const accessManager = abilityAccessCtrl.createAtManager();try {const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleFlags);const grantStatus = await accessManager.checkAccessToken(bundleInfo.appInfo.accessTokenId, permissions[0]); // 检查权限if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {accessManager.requestPermissionsFromUser(this.context, permissions); // 申请权限}} catch (err) {Logger.error('EntryAbility', 'checkPermissions', `Catch err: ${err}`);return;}}
}
3、实现简单的接口
源端:实现源端回调
onContinue(wantParam: Record<string, Object | undefined>): AbilityConstant.OnContinueResult {...return AbilityConstant.OnContinueResult.AGREE // 同意迁移
}
对端:实现对端回调
onCreate(want:Want, launchParam: AbilityConstant.LaunchParam): void {this.checkPermissions()if (launchParam.launchReason === AbilityConstant.LaunchParam.CONTINUATION) {this.context.restoreWindowStage(new LocalStorage));}
}
4、分布式数据传输
(1)页面数据
a、使用ArkUI支持数据迁移的组件
b、通过配置项设置进行页面栈迁移
(2)业务数据
a、少量应用状态(<100KB)通过wantParam传输
b、内存数据通过分布式对象迁移
c、文件数据通过分布式文件迁移