一、自由流转的形态
流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如邮件跨设备编辑、多设备协同健身、多屏游戏等分布式业务。
二、跨端迁移
在应用开发层面,跨端迁移指在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、文件数据通过分布式文件迁移