CH8-HarmonyOS流转架构解析

文章目录

  • 前言
  • 目标
  • 核心概念
    • 流转架构特性
    • Ability的调度
    • 流转应用场景
  • 流转架构
    • 核心模块
    • 跨端迁移关键流程
    • 多端协同关键流程
  • 分布式任务调度
    • 连接远程PA
    • 启动远程FA/PA
    • 迁移FA
    • 接口IAbilityContinuation的方法
  • 跨端迁移功能开发
  • 多端协同功能开发
    • 启动遥控器
    • 连接远程智慧屏
    • 遥控器与智慧屏交互
  • 本章总结

前言

  • 物联网时代的核心是具备互联互通能力的智能设备,目前智能市场的现状远不能达到预定的目标。
    • 现实的工作生活场景是用户拥有的设备越来越多,每个设备都能在适合的场景下提供良好的体验,例如:手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。
    • 但是每个设备也有使用场景的局限,例如:在电视上输入文本相对手机来说是非常糟糕的体验。因此每个设备都成为“设备孤岛”,使用频率和效率低下。

目标

  • 理解流转架构的工作原理和工作过程,
  • 能够使用跨端流转功能多端协同功能来开发具有多端交互能力的分布式APP

核心概念

  • 跨端迁移:一种实现用户应用程序流转的技术方案指在A端运行的FA迁移到B端上,完成迁移后, B端FA继续任务,而A端应用退出
  • 多端协同:一种实现用户应用程序流转的技术方案,多端上的不同FA/PA同时运行、或者交替运行实现完整的业务或者,多端上的相同FA/PA同时运行实现完整的业务。多个设备作为一个整体为用户提供比单设备更加高效、沉浸的体验

流转架构特性

  • 在HarmonyOS中,流转泛指多设备分布式操作。流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转。
    • 流转架构对搭载HarmonyOS的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用屏蔽硬件差异
    • 支持远程启动、远程调用、业务无缝迁移等分布式任务。
  • 流转架构在底层实现Ability(分布式操作的基本组件)跨设备的启动/关闭连接及断开连接以及迁移等能力,实现跨设备的组件管理

Ability的调度

  • 启动和关闭:向开发者提供管理远程Ability的能力,即支持启动Page模板的Ability,以
    及启动、关闭Service和Data模板的Ability。
  • 连接和断开连接:向开发者提供跨设备控制服务(Service和Data模板的Ability)的能力,
    开发者可以通过与远程服务连接及断开连接实现获取或注销跨设备管理服务的对象,达到和本地一致的服务调度。
  • 迁移能力:向开发者提供跨设备业务的无缝迁移能力,开发者可以通过调用Page模板
    Ability的迁移接口,将本地业务无缝迁移到指定设备中,打通设备间壁垒。

流转应用场景

  • 导航场景:如果用户驾车出行,上车前,在手机上规划好导航路线;上车后,导航自动
    迁移到车机和车载音箱;下车后,导航自动迁移回手机。如果用户骑车出行,在手机上
    规划好导航路线,骑行时手表可以接续导航。
  • 外卖场景:在手机上点外卖后,可以将订单信息迁移到手表上,随时查看外卖的配送状
    态。

流转架构

  • HarmonyOS流转提供了一组API库,可让用户应用程序更轻松、快捷地完成流转体验。
    HarmonyOS流转架构有如下优势:
    • 统一流转管理UI,支持设备发现、选择以及任务管理;
    • 支持远程服务调用等能力,可轻松设计业务;
    • 支持多个应用同时进行流转
    • 支持不同形态设备,如手机、平板、TV、手表等。

20220125140930

核心模块

  • 流转任务管理服务:在流转发起端,接受用户应用程序注册,提供流转入口、状态显示、退出流转等管理能力。
  • 分布式任务调度提供远程服务启动、远程服务连接、远程迁移等能力,并通过不同能力组合,支撑用户应用程序完成跨端迁移或多端协同的业务体验。
  • 分布式安全:提供端到端的加密通道,为用户应用程序提供安全的跨端传输机制,保证“正确的人,通过正确的设备,正确地使用数据”。
  • 分布式软总线:使用基于手机、平板、智能穿戴、智慧屏等分布式设备的统一通信基座,为设备之间的互联互通提供统一的分布式通信能力

跨端迁移关键流程

  • 流转准备:设备A上的应用向流转任务管理服务注册一个流转回调;
  • 流转开始:设备A上的应用通过调用分布式任务调度的能力,实现应用迁移
  • 系统回调设备A上FA的onStartContinuation()方法,以确认当前FA是否可以开始迁移,onStartContinuation方法返回true,表示当前FA可以开始迁移;
  • 如果可以开始迁移,则系统回调设备A上FA的onSaveData()方法,以便保存迁移后恢复状态必须的据,数据保存在函数的savedData参数中;
  • 如果保存数据成功,则系统在设备B上启动同一个FA,然后回调onRestoreData()方法,传递设备A上FA保存的数据,应用可在此方法恢复业务状态;此后设备B上此FA从onInit()开始其生命周期回调;
  • 系统回调设备A上FA的onCompleteContinuation()方法,通知应用迁移成功。迁移操作完成,参数code返回结果。

QQ截图20220125141208

多端协同关键流程

  • 流转进行:设备A上的应用通过调用分布式任务调度的能力如startAbility,connectAbility等,向设备B的应用发起多端协同。
  • 协同开始
    • 设备A调用startAbility启动设备B的FA和PA;
    • 设备A调用connectAbility连接设备B的PA
      • 在设备A上通过本地应用提供的连接按钮,连接设备B上指定的PA。
      • 连接后,通过其他功能相关按钮实现控制对端PA的能力。通过连接关系,开发者可以实现跨设备的同步服务调度,实现如大型计算任务互助等价值场景。
  • 协同结束
    • 设备A调用disconnectAbility断开与设备B的PA的连接:将之前已连接的PA断开连接;
    • 设备A调用stopAbility关闭设备B的PA:关闭设备B上指定的PA。

QQ截图20220125142106

  • 约束与限制

    • 开发者需要在Intent中设置支持分布式的标记例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示该应用支持分布式调度),否则将无法获得分布式能力。

    • 开发者通过在config.json中的reqPermissions字段里添加多设备协同访问的权限申请:三方应用使用{“name”: “ohos.permission.DISTRIBUTED_DATASYNC”}。

20220125142302

分布式任务调度

  • 开发者在应用中集成分布式调度能力通过调用指定能力的分布式接口,实现跨设备能力调度。根据Ability模板及意图的不同,分布式任务调度向开发者提供以下六种能力:
    • 启动远程FA
    • 启动远程PA
    • 关闭远程PA
    • 连接远程PA
    • 断开连接远程PA
    • FA跨设备迁移

连接远程PA

  • connectAbility(Intent intent, IAbilityConnection conn)接口提供连接指定设备上PA的能力,Intent中指定待连接PA的设备deviceId、bundleName和abilityName。当连接成功后,通过在conn定义onAbilityConnectDone回调中获取对端PA的服务代理,两者的连接关系则由conn维护。具体的参数定义如下表所示:

20220125142803

启动远程FA/PA

  • startAbility(Intent intent)接口提供启动指定设备上FA和PA的能力,Intent中指定待启动FA/PA的设备deviceId、bundleName和abilityName。具体参数定义如下:
    • 分布式调度平台还会提供与上述功能相对应的断开远程PA的连接和关闭远程PA的接口,相关的参数与连接、启动的接口类似;
    • 断开远程PA连接:disconnectAbility(IAbilityConnection conn);
    • 关闭远程PA:stopAbility(Intent intent)。

20220125142938

迁移FA

  • continueAbility()接口提供将本地FA迁移到指定设备上的能力。需要实现IAbilityContinuation及其方法,才可以实现FA迁移。IAbilityContinuation的方法有:
    • onStartContinuation():Page请求迁移后,系统首先回调此方法,开发者可以在此回调中决策当前是否可以执行迁移,比如,弹框让用户确认是否开始迁移;
    • onSaveData():如果onStartContinuation()返回true,则系统回调此方法,开发者在此回调中保存必须传递到另外设备上以便恢复Page状态的数据

接口IAbilityContinuation的方法

  • onRestoreData():源侧设备上Page完成保存数据后,系统在目标侧设备上回调此方法,开发者在此回调中接受用于恢复Page状态的数据。注意,在目标侧设备上的Page会重新启动其生命周期,无论其启动模式如何配置。且系统回调此方法的时机在onStart()之前。
  • onCompleteContinuation():目标侧设备上恢复数据一旦完成,系统就会在源侧设备上回调Page的此方法,以便通知应用迁移流程已结束。开发者可以在此检查迁移结果是否成功,并在此处理迁移结束的动作,例如,应用可以在迁移完成后终止自身生命周期。

跨端迁移功能开发

  • 跨设备迁移(下文简称“迁移”)支持将Page在同一用户的不同设备间迁移,以便支持用户无缝切换的诉求。以Page从设备A迁移到设备B为例,迁移动作主要步骤如下:

    • 设备A上的Page请求迁移;
    • HarmonyOS处理迁移任务,并回调设备A上Page的保存数据方法,用于保存迁移必须的数据;
    • HarmonyOS在设备B上启动同一个Page,并回调其恢复数据方法。
  • 以下详细代码说明如何开发具有迁移功能的Page。

    tryContinueAbility: async function() {
        let result = await FeatureAbility.continueAbility();
        console.info("result:" + JSON.stringify(result));
    },
        onStartContinuation() {
            console.info("onStartContinuation");
            return true;
        },
            onCompleteContinuation(code) {
                console.info("CompleteContinuation: code = " + code);
            },
                onSaveData(saveData) {
                    var data = this.continueAbilityData;
                    Object.assign(saveData, data)
                },
                    onRestoreData(restoreData) {
                        this.continueAbilityData = restoreData;
                    },
    
    • 迁移运行效果

20220125145002

多端协同功能开发

  • 电视机遥控器

    20220125145033

启动遥控器

  • 点击TV端主界面搜索框,会出现选择手机遥控器的弹框。用户选择需要的手机遥控设备,点击后会立刻拉起手机遥控输入界面。

    public void openRemoteAbility(String deviceId, String bundleName, String abilityName) { 
        Intent intent = new Intent(); 
        intent.setParam("localDeviceId", localDeviceId); 
        Operation operation = new Intent.OperationBuilder() 
            .withDeviceId(deviceId) 
            .withBundleName(bundleName) 
            .withAbilityName(abilityName) 
            .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) 
            .build(); 
        intent.setOperation(operation); 
        abilitySlice.startAbility(intent); 
    }
    

连接远程智慧屏

  • 遥控界面FA在启动过程中,通过initConnManager()方法,与TV端RemoteService建立连接。

    Intent connectPaIntent = new Intent();
        Operation operation = new Intent.OperationBuilder()
       			bundlename... 
            .build();
            connectPaIntent.setOperation(operation);
            conn = new IAbilityConnection() {
            	@Override
            public void onAbilityConnectDone(ElementName elementName, IRemoteObject remote, int resultCode) { 
                proxy = new MyRemoteProxy(remote); 
            }
        @Override 
        public void onAbilityDisconnectDone(ElementName elementName, int resultCode) {
            proxy = null;}};
    context.connectAbility(connectPaIntent, conn);
    }
    }
    

遥控器与智慧屏交互

  • 服务端的RemoteService为Service Ability,专门处理发送到服务端的客户请求。

    RemoteService处理请求是通过RemoteObject的子类MyRemote实现的。
    public class MyRemote extends RemoteObject implements IRemoteBroker {
        private MyRemote() {
        }
        @Override
        public IRemoteObject asObject() {
            return this;
        }
        @Override
        public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {
            LogUtils.info(TAG, "===onRemoteRequest......");
            int requestType = data.readInt();
            String inputString = data.readString();
            sendEvent(requestType, inputString);
            return true; 
        }
    }
    

本章总结

  • HarmonyOS系统中的流转架构是实现HarmonyOS重要特性“超级终端”的必要条件,
  • 首先介绍了流转架构的核心组件,接着介绍了流转架构的两种实现方式跨端迁移和多端协同的关键流程,最后按照这些流程实现了两种流转架构。
  • 其中,分布式协同的实现案例-·分布式遥控器充分体现了“超级终端”的意义所在

eadString();
sendEvent(requestType, inputString);
return true;
}
}








# 本章总结

* HarmonyOS系统中的流转架构是实现HarmonyOS重要特性`“超级终端”`的必要条件,
* 首先介绍了`流转架构的核心组件`,接着介绍了`流转架构的两种实现方式`跨端迁移和多端协同的关键流程,最后按照这些流程实现了两种流转架构。
* 其中,分布式协同的实现案例-·`分布式遥控器充`分体现了“超级终端”的意义所在

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿洲213

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值