CH8-HarmonyOS流转架构解析
文章目录
- 前言
- 目标
- 核心概念
- 流转架构特性
- Ability的调度
- 流转应用场景
- 流转架构
- 核心模块
- 跨端迁移关键流程
- 多端协同关键流程
- 分布式任务调度
- 连接远程PA
- 启动远程FA/PA
- 迁移FA
- 接口IAbilityContinuation的方法
- 跨端迁移功能开发
- 多端协同功能开发
- 启动遥控器
- 连接远程智慧屏
- 遥控器与智慧屏交互
- 本章总结
前言
- 物联网时代的核心是
具备互联互通能力的智能设备
,目前智能市场的现状远不能达到预定的目标。- 现实的工作生活场景是用户拥有的
设备越来越多
,每个设备都能在适合的场景下提供良好的体验
,例如:手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。 - 但是每个设备也有使用场景的局限,例如:在电视上输入文本相对手机来说是非常糟糕的体验。因此每个设备都成为
“设备孤岛”
,使用频率和效率低下。
- 现实的工作生活场景是用户拥有的
目标
- 理解
流转架构
的工作原理和工作过程, - 能够使用
跨端流转功能
和多端协同功能
来开发具有多端交互能力的分布式APP
。
核心概念
跨端迁移
:一种实现用户应用程序流转的技术方案
,指在A端运行的FA迁移到B端上
,完成迁移后, B端FA继续任务,而A端应用退出。多端协同
:一种实现用户应用程序流转的技术方案,指多端上的不同FA/PA同时运行
、或者交替运行
实现完整的业务;或者,多端上的相同FA/PA同时运行
实现完整的业务。多个设备作为一个整体
为用户提供比单设备更加高效、沉浸的体验。
流转架构特性
- 在HarmonyOS中,
流转
泛指多设备分布式操作
。流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转。- 流转架构对搭载HarmonyOS的多设备构筑的“超级虚拟终端”提供
统一的组件管理能力
,为应用屏蔽硬件差异
; - 支持远程启动、远程调用、业务无缝迁移等分布式任务。
- 流转架构对搭载HarmonyOS的多设备构筑的“超级虚拟终端”提供
- 流转架构
在底层实现Ability
(分布式操作的基本组件)跨设备的启动/关闭
、连接及断开连接
以及迁移
等能力,实现跨设备的组件管理
。
Ability的调度
启动和关闭
:向开发者提供管理远程Ability的能力
,即支持启动Page模板的Ability,以
及启动、关闭Service和Data模板的Ability。连接和断开连接
:向开发者提供跨设备控制服务
(Service和Data模板的Ability)的能力,
开发者可以通过与远程服务连接及断开连接实现获取或注销跨设备管理服务的对象,达到和本地一致的服务调度。迁移能力
:向开发者提供跨设备业务的无缝迁移能力
,开发者可以通过调用Page模板
Ability的迁移接口,将本地业务无缝迁移到指定设备中,打通设备间壁垒。
流转应用场景
导航场景
:如果用户驾车出行,上车前,在手机上规划好导航路线;上车后,导航自动
迁移到车机和车载音箱;下车后,导航自动迁移回手机。如果用户骑车出行,在手机上
规划好导航路线,骑行时手表可以接续导航。外卖场景
:在手机上点外卖后,可以将订单信息迁移到手表上,随时查看外卖的配送状
态。
流转架构
- HarmonyOS流转提供了
一组API库
,可让用户应用程序更轻松、快捷地完成流转体验。
HarmonyOS流转架构有如下优势:统一流转管理UI
,支持设备发现、选择以及任务管理;支持远程服务调用
等能力,可轻松设计业务;支持多个应用同时进行流转
;支持不同形态设备
,如手机、平板、TV、手表等。
核心模块
流转任务管理服务
:在流转发起端,接受用户应用程序注册,提供流转入口、状态显示、退出流转等管理能力。分布式任务调度
:提供远程服务启动、远程服务连接、远程迁移等能力,并通过不同能力组合,支撑用户应用程序完成跨端迁移或多端协同
的业务体验。分布式安全
:提供端到端的加密通道,为用户应用程序提供安全的跨端传输机制
,保证“正确的人,通过正确的设备,正确地使用数据”。分布式软总线
:使用基于手机、平板、智能穿戴、智慧屏等分布式设备的统一通信基座,为设备之间的互联互通提供统一的分布式通信能力
。
跨端迁移关键流程
流转准备
:设备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返回结果。
多端协同关键流程
流转进行
:设备A上的应用通过调用分布式任务调度的能力
,如startAbility,connectAbility等,向设备B的应用发起多端协同。协同开始
- 设备A
调用startAbility
启动设备B的FA和PA; - 设备A
调用connectAbility连接设备B的PA
:- 在设备A上通过本地应用提供的连接按钮,连接设备B上指定的PA。
- 连接后,通过其他功能相关按钮实现控制对端PA的能力。通过连接关系,开发者可以实现跨设备的同步服务调度,实现如大型计算任务互助等价值场景。
- 设备A
协同结束
- 设备A
调用disconnectAbility
断开与设备B的PA的连接:将之前已连接的PA断开连接; - 设备A
调用stopAbility关闭设备B的PA
:关闭设备B上指定的PA。
- 设备A
约束与限制
开发者需要
在Intent中设置支持分布式的标记
(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示该应用支持分布式调度),否则将无法获得分布式能力。开发者通过在config.json中的
reqPermissions字段
里添加多设备协同访问的权限申请:三方应用使用{“name”: “ohos.permission.DISTRIBUTED_DATASYNC”}。
分布式任务调度
- 开发者在应用中
集成分布式调度能力
,通过调用指定能力的分布式接口,实现跨设备能力调度。根据Ability模板及意图的不同,分布式任务调度向开发者提供以下六种能力:- 启动远程FA
- 启动远程PA
- 关闭远程PA
- 连接远程PA
- 断开连接远程PA
- FA跨设备迁移
连接远程PA
connectAbility(Intent intent, IAbilityConnection conn)接口
提供连接指定设备上PA的能力,Intent
中指定待连接PA的设备deviceId、bundleName和abilityName。当连接成功后,通过在conn
定义onAbilityConnectDone回调中获取对端PA的服务代理,两者的连接关系则由conn维护
。具体的参数定义如下表所示:
启动远程FA/PA
startAbility(Intent intent)接口
提供启动指定设备上FA和PA的能力,Intent中指定待启动FA/PA的设备deviceId、bundleName和abilityName。具体参数定义如下:- 分布式调度平台还会提供与上述功能相对应的
断开远程PA的连接和关闭远程PA的接口
,相关的参数与连接、启动的接口类似; 断开远程PA连接
:disconnectAbility(IAbilityConnection conn);关闭远程PA
:stopAbility(Intent intent)。
- 分布式调度平台还会提供与上述功能相对应的
迁移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;},
- 迁移运行效果
多端协同功能开发
电视机遥控器
启动遥控器
点击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重要特性`“超级终端”`的必要条件,
* 首先介绍了`流转架构的核心组件`,接着介绍了`流转架构的两种实现方式`跨端迁移和多端协同的关键流程,最后按照这些流程实现了两种流转架构。
* 其中,分布式协同的实现案例-·`分布式遥控器充`分体现了“超级终端”的意义所在
CH8-HarmonyOS流转架构解析相关推荐
- 智能化视频开发神器来了,AV Pipeline Kit 架构解析
作者 | 宋慧 出品 | CSDN 在中国,93.4%的上网者都是网络视频.短视频的受众.随着宽带提速,5G 普及,用户对网络视频播放速度和清晰度需求水涨船高.AI 技术让音视频有了更多玩法,例如用户 ...
- 从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...
http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...
- java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...
http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...
- 技术干货 | 网易云信大规模聊天室系统架构解析
导读:聊天室是一类非常重要的 IM 系统,不同于单聊和群聊,聊天室是一种大规模的实时消息分发系统.本文我们来详细介绍一下网易云信大规模聊天室系统的具体架构以及实践应用案例. 文|曹佳俊 网易云信资深服 ...
- 特斯拉Tesla Model 3整体架构解析(上)
特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...
- The JVM Architecture Explained-JVM架构解析(译)
2019独角兽企业重金招聘Python工程师标准>>> 翻译原文:https://dzone.com/articles/jvm-architecture-explained JVM架 ...
- 千万级在线推送系统架构解析
2019独角兽企业重金招聘Python工程师标准>>> 千万级在线推送系统架构解析 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受 ...
- 超低延迟直播架构解析
本文由百度智能云-视频云直播技术架构师--朱晓恩 在百度开发者沙龙线上分享的演讲内容整理而成.内容从低延时直播背景与机遇出发,分析低延迟直播技术,重点分享百度在低延迟直播技术的实践工作. 文/ 朱晓恩 ...
- 直播报名 | 超低延时直播架构解析
超低延时直播架构解析|百度智能视频云3.0全场景音视频技术解析第 4 期 直播详情 第4期:超低延时直播架构解析 时至今日,互联网直播经历了 4 年的高速期发展,用户对体验的要求也越来越高,传统的 5 ...
最新文章
- Linux 命令行小技巧《叹号的用处》
- 无法启动python怎么办_解决python写的windows服务不能启动的问题
- 腾讯云工业互联网助力平台发布 推动制造业“数字化”蝶变
- JavaScript DOM 高级程序设计读书笔记二
- VFS文件系统结构分析 与socket
- 启动项目的时候,一直打印日志
- springboot根据环境装配配置文件、启动加载外置配置文件
- git版本管理工具学习
- [转载] java避免空指针异常_第1部分:在现代Java应用程序中避免空指针异常
- 理解C++ dynamic_cast
- Smobiler图片二进制上传处理
- bios设置raid启动模式Linux,[BIOS设置]BIOS中RAID模式怎么设置?
- hiar sdk for android,HiAR | HiAR SDK for Unity | 涂涂乐开发教程
- java 1 9随机数_Java-随机数详解
- 网络中丢包的原因及类型
- C语言函数递归(传入一个整数,打印数字的每一位)
- Web前端期末大作业-在线手机商城网站设计(HTML+CSS+JS)
- vmtools官方下载地址
- IDEA 设置保存时自动格式化代码 - 中文界面
- 提取网页文字-免费批量自动提取网页文字软件
热门文章
- 如何最大化您的视频营销预算
- 【效率特工队】如何在很多张JPG图片中,批量获取所有JPG图片的名称提取到Excel表格,用这个方法一并解决
- 【0基础QQ机器人开发】基于go-cqhttp的QQ机器人开发教程,仅供自学
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java研究生教学管理系统p5aow
- apex显示服务器不同步,apex云服务器不同步
- 使用Apache XML项目FOP生成PDF文件(上)
- Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行
- 编写用户帮助/操作手册指南
- ROS命令行工具 小乌龟入门
- Python爬取APP上的数据教程