CH8-HarmonyOS流转架构解析

news/2024/5/19 18:49:10/文章来源:https://blog.csdn.net/weixin_46227276/article/details/122690988

文章目录

  • 前言
  • 目标
  • 核心概念
    • 流转架构特性
    • 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() {@Overridepublic 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() {}@Overridepublic IRemoteObject asObject() {return this;}@Overridepublic 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重要特性`“超级终端”`的必要条件,
* 首先介绍了`流转架构的核心组件`,接着介绍了`流转架构的两种实现方式`跨端迁移和多端协同的关键流程,最后按照这些流程实现了两种流转架构。
* 其中,分布式协同的实现案例-·`分布式遥控器充`分体现了“超级终端”的意义所在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_88885.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法刷题】第二篇——链表(一)

个人简介: > 📦个人主页:赵四司机 > 🏆学习方向:JAVA后端开发 > 📣种一棵树最好的时间是十年前,其次是现在! > 🔔博主推荐网站:牛客网 刷题|面…

java注册界面发送邮箱验证码(无线程版)

​ 邮箱验证注册 本篇文章使用第三方jar包实现邮箱发送验证码来注册用户,该文章未采用线程如果多人访问注册注册页面发送邮件可能会导致服务器崩溃,建议采用线程发送邮件!!! 一、前期准备工作 1.发送验证码所需要用…

MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

MinGW-w64安装教程——著名C/C编译器GCC的Windows版本 MinGW-w64安装教程——著名C/C编译器GCC的Windows版本 本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用。 编写本文的原因始于…

计算机三级数据库技术

第一章 数据库应用系统开发方法 数据库应用系统生命周期 软件工程与软件开发方法 瀑布模型 快速原型模型 螺旋模型 DBAS生命周期 DBAS生命周期:项目规划、需求分析、系统设计、实现与部署、运行与维护 规划与分析 可行性分析:经济可行性、技术可行性、操…

NoSQL之redis配置

目录 关系数据库与非关系数据库 关系数据库与非关系数据库概念 关系型数据库和非关系型数据库区别 关系型数据库与非关系型数据库特点 字段保存方式 Redis Redis 优点 Redis为什么这么快? redis安装部署 redis工具 redis 命令工具 redis-cli 命令行工具 …

Mybatis中如何实现一对一,一对多的关联查询?

MyBatis实现一对一、一对多关联查询一般有两种方式: 方式一:sqlMapper配置文件 一对一:在resultMap标签中使用 association 标签 一对多:在resultMap 标签中使用collection 标签 方式二:注解 一对一:在…

MySQL使用简单教程

本文通过演示如何使用MySQL客户机程序创建和使用一个简单的数据库,允许连接到MySQL服务器、运行查询和查看结果。 mysql也可以在批处理模式下使用:预先将查询放在文件中,然后告诉mysql执行文件的内容。 要查看mysql提供的选项列表&#xff0c…

解决MySQL插入不了中文数据问题

🎈目录🎈 原因⁉ 具体解决方法 1️⃣创建数据库时设置字符集为utf8 2️⃣修改数据库配置文件(比较麻烦) 我们使用MySQL可能会遇到加入中文报错的情况,如下。 报错:非法的字符值 放入 ‘name’ 为什么…

MySQL 复制架构

MySQL 复制架构 第一节 概述 1.1 数据拓展 热备份:数据库在运行的过程中,对数据进行备份操作。相对的,还有冷备份,冷备份需要停机,然后对数据进行备份操作。多活:所谓的多活,就是让数据库机器…

习惯了微信聊天,利用WebSocket手动实现个聊天功能怎么样?

1.背景 基于项目需求,最近需要实现一个简单的聊天功能。日常生活中,大家对于聊天也习以为常,微信、QQ等软件也经常用到,其实我们也可以引入一些第三方的sdk包等去实现,也可以利用WebSocket通信协议去手动实现简单的聊…

【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析

🎄目录🌼写在前面🌻 A题 --- 九进制转十进制🌷 题目描述🌷 解题思路🌷 代码编写🌻 B题 --- 顺子日期🌷 题目描述🌷 解题思路🌷 代码编写🌻 C题 --…

92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了

当下,是一个“向钱看,向厚赚”的社会。快节奏的生活下,家庭、工作各方面压力很容易使年轻人陷入迷茫和焦虑。 与其他行业相比,程序员的高薪让人羡慕。那么,对于那些真正达到这么多收入的人来说,他们是怎么…

Mysql安装包安装教程(亲测简单高效版)

Mysql安装包安装教程(亲测简单高效版)安装流程mysql安装SQLyog安装安装流程 mysql安装 1.下载mysql,官方地址:mysql官网 2.解压mysql安装包到任意目录下 3.新建my.ini文件 4.配置my.ini [mysqld] basedirD:\Program Files\J…

sql语法:详解DDL

Mysql版本:8.0.26 可视化客户端:sql yog 目录一、DDL是什么?二、和数据库相关的DDL2.1 创建数据库2.2 删除数据库2.3 查看所有的数据库,当前用户登录后,可以看到哪些数据库2.4 查看某个数据库的详细定义2.5 修改数据库…

Windows系统GIT安装与GitHub远程仓库

文章目录Windows系统GIT安装Git是什么windows环境安装环境变量验证安装GitHub与远程仓库GitHub是什么GitHub账号注册创建本地SSH KeyGitHub接入本地电脑公匙创建个人远程库传送门Windows系统GIT安装 Git是什么 Git(读音为/gɪt/)是一个开源的分布式版本…

接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)

目录 一、Postman背景介绍 二、Postman的操作环境 三、Postman重要提示: 四、什么是接口测试 五、接口测试工具 六、接口测试流程 七、接口测试执行 八、全局变量和环境变量 九、postman接口关联 十、postman动态参数 十一、postman断言 十二、postman用…

Unity --- Transform类

1.一个很有意思的事实是Transform类不仅用来管理游戏物体的位置缩放旋转,还用来管理游戏物体的父物体与子物体之间的关系 当游戏物体A的trasnform类a是游戏物体B的transform类b的父类的话,游戏物体A就是游戏物体B的父物体 2.如何访问脚本当前挂载的游戏…

手把手教你安装VSCode(附带图解步骤)

一、前端工具vscode 1.1、概述 前端开发是创建Web页面或app等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互 [1] 。它从网页制作演变而来,名称上有…

如何用Python对股票数据进行LSTM神经网络和XGboost机器学习预测分析(附源码和详细步骤),学会的小伙伴们说不定就成为炒股专家一夜暴富了

前言 最近调研了一下我做的项目受欢迎程度,大数据分析方向竟然排第一,尤其是这两年受疫情影响,大家都非常担心自家公司裁员或倒闭,都想着有没有其他副业搞搞或者炒炒股、投资点理财产品,未雨绸缪,所以不少…

你单位数字化转型了吗?

写在前面:本文由Bing AI和我一起完成,它完成90%内容,致谢! 1.数字化转型 近两年数字化转型在社会面搞得轰轰烈烈,数字化转型是指,利用新一代信息技术,构建数据的采集、传输、存储、处理和反馈的…