HarmonyOS应用框架如何解决多设备交互问题?

Posted HarmonyOS技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS应用框架如何解决多设备交互问题?相关的知识,希望对你有一定的参考价值。

随着全场景多设备生活方式的不断深入,用户拥有的设备越来越多,除了我们每天带在身上的手机、手腕上的智能手表、口袋里面的无线耳机、背包里面的PC和Pad、另外家里还有智能电视、智能冰箱等设备,这些年,汽车也在逐步地变成一台跑在道路上的电子设备,如果这些设备都是彼此孤立的,那体验一定是很差的。

因此,要想让万物互联,就需要新的交互模式,而新的交互模式在开发时,需要应用框架加持,HarmonyOS应用框架就解决了新时代的交互问题。接下来我们以用户交互为起点,来介绍HarmonyOS应用框架是如何解决多设备交互问题的。

一、万物互联时代的基本交互模型

如图1所示,纵观人机交互历史,有以下几个关键时间点:

  • 1868年,打字机的出现解决了人机交互中文字输入的问题

  • 1964年,鼠标的出现解决了人机交互中图形界面交互的问题

  • 2007年,多指手势的出现解决了触摸屏的交互问题

::: hljs-center

图1 人机交互模式图

:::

这三个历史时间点可以说是人机交互史上的分水岭,它们提供了新的交互方式解决了新类型设备的交互问题。但是,这三种交互方式解决的都是单机交互的问题,而万物互联时代面临的是多设备交互的复杂问题。

基于人机交互多年的研究分析,我们发现,在多设备的交互场景上,用户使用设备的场景可以分为两大类,一类是用户同时使用多个设备,另一类是相继使用多个设备(如图2所示)。
::: hljs-center

图2 多设备交互模型图

:::

1.**同时使用Simultaneous**)

当我们在同时使用多个设备时,除了并发性之外,交互模型还有两个重要的特点就是:协作性和互补性。协作性是指多个设备彼此交互协调完成一项任务。互补性是指利用设备的本身形态差异,设备之间互相取长补短,完成一项任务。

例如,当我们在家里找不到电视遥控的时候,手机可以变身成遥控器,这就是一种设备能力的互补。

2.相继使用(Sequential)

而当我们相继使用多个设备时,连续性和一致性就非常重要了。连续性是指,当我从一个设备转向另外一个设备的时候,我刚刚操作的状态应当是继续保留没有被中断的。例如:将手机上播放的视频转到PAD上后能够继续播放。而一致性是指,当我们在使用手表、手机、大屏等不同设备时,它们操作方式和基础视觉元素应当是一致的。例如:多指手势、控件的样式。当然,一致不代表一样,每种设备由于其屏幕尺寸和形态不一样,视觉元素还需要有针对性地进行一些自适应。

为了满足上述两种交互模型,HarmonyOS构建的分布式应用框架中提供了两种基础功能,分别是:多端协同跨端迁移

接下来我们将介绍HarmonyOS的上述两个能力是如何解决多设备交互问题的。

二、HarmonyOS如何解决多设备交互问题?

首先我们来介绍HarmonyOS分布式应用框架,该框架可以分为5层(如图3所示)。

::: hljs-center

图3 分布式应用框架整体架构视图

:::

Layer1底层软件,包括内核、驱动和还有软总线,这一层与开发者距离相对较远。

Layer2基础能力平台,它包含了很多分布式环境下的基础服务,例如:分布式任务调度、分布式数据管理、分布式硬件管理以及分布式文件管理等。

Layer3是应用框架的核心服务,大体可以分为两块:一块是全局包管理,一块是分布式运行管理。与传统的操作系统不同,HarmonyOS上的包管理,需要处理整个超级终端上所有设备的包信息,因此我们称之为全局包管理。而对于分布式运行管理,将在下文重点介绍,其中包含了协同和迁移框架。

Layer4是开发者所使用的编程接口层。尽管系统底层的实现非常复杂,但是我们在第四层为开发者提供了简洁的接口。

Layer5是开发应用的用户程序层,这一层与开发者联系密切。

接下来我们将重点为大家介绍Layer3中实现多设备交互模型的两个框架,分别是多端协同框架跨端迁移框架

1.多端协同框架

多端协同框架就是为用户同时使用多个设备的场景而准备的。例如:手机侧应用做游戏手柄,智慧屏侧应用做游戏显示,为用户组成一个全新的游戏体验;又如:平板侧应用做答题板,智慧屏侧应用做直播,为用户组成一个全新的上网课体验。

要实现这样的业务,就要借助多端协同框架(如图4所示)。

::: hljs-center

图4 多端协同

:::

多端协同是一种实现用户应用程序流转的技术方案,指多端上的不同FA/PA同时运行、或者交替运行实现完整的业务;或者多端上的相同FA/PA同时运行实现完整的业务。多个设备作为一个整体为用户提供比单设备更加高效、沉浸的体验。

当我们的业务需要跨越多个设备时,有两个基本的能力需要保证:

一是能够建立跨设备的连接通路,并且实时感知连接状态的变化。这一点通过IAbilityConnection来完成,它依赖分布式管理服务和软总线来进行底层连接的管理。

二是能够在连接通道上传递状态和数据,以进行业务的协同。这一点可以通过HarmonyOS的IDL实现。这些传递的数据既包含了系统需要传递的数据,也包含了应用程序进行需要传递的数据。

有了这两个能力,开发者便可以完成不同设备之间业务逻辑的协同,以及设备之间硬件能力互补的功能。

2.跨端迁移框架

跨端迁移是用来为用户相继使用多个设备而准备的,它是我们常用的一个场景。例如,当你通过手机观看视频时,觉得体验不够好,你想切换到屏幕更大、音效更好的PAD上继续观看,在HarmonyOS之外的系统上,你只能先解锁PAD,找到那个应用,然后再找到播放历史,如果运气好,你的播放进度已经被同步过去了,但很可能,由于网络同步的延迟,你还得先找到刚刚观看的位置,然后再继续观看。

而关注HarmonyOS系统的朋友们一定会知道,在今年HarmonyOS 2发布会上,我们发布了全新的服务中心。在这个服务中心当中,你可以跨设备的管理整个超级终端上的任务列表,这使得你可以直接在手机上的任务中心,一步将任务拖动到PAD上就可以了。

要完成这一点,就要借助跨端迁移框架(如图5所示)

::: hljs-center

图5 跨端迁移

:::

跨端迁移是一种实现用户应用程序流转的技术方案,是将设备1端运行的FA迁移到设备2端上,通过IAbilityContinuation实现业务迁移。完成迁移后, 设备2端的FA继续任务,而设备1端应用退出。当用户将任务从一台设备拖动到另外一台设备上时,应用程序会收到来自系统的调用,此时应用程序可以将自己需要保存的状态告知系统,系统会借助于分布式任务管理将数据传递到目标端,然后拆包数据并恢复应用状态。在这种情况下,用户感受到的就是将任务从一个设备迁移到了另外一个设备。

迁移和协同需要开发者的支持,但这类新的特性往往并不能在短时间内获得完全地普及, 当应用没有适配迁移框架时,系统要如何完成跨段迁移任务?

①跨端迁移与窗口管理

为了保证用户体验的一致性,当应用没有适配迁移框架的时候,系统会通过分布式窗口管理的能力完成跨端迁移任务。如图6所示,当用户跨设备拖动任务时,HarmonyOS系统会将任务窗口迁移到一个Virtual Window(虚拟窗口)上渲染,然后将渲染的结果通过软总线传递到ProxyWindow(远端的代理窗口)上,由此达到跨设备显示的效果。

::: hljs-center

图6 分布式窗口管理图

:::

②分布式硬件平台与自动跟随

我们知道,应用在运行过程中,很多时候都会利用一些硬件设备。例如:Camera、麦克风或传感器。而当我们将一个应用从一个设备迁移到另外一个设备之后,不只是把用户界面和应用状态转移过去就可以了,如果转移之后声音还留在原来的设备上播放,那就比较奇怪了。因此,在HarmonyOS中,这些硬件是如何管理的呢?

为了使得应用迁移的流程更加具有一致性,我们在硬件层面系统中做了两件事情(如图7所示):

::: hljs-center

图7 分布式硬件平台与自动跟随

:::

第一件事是“硬件资源池化”。即:HarmonyOS系统会将超级终端上所有设备的硬件进行全局的编号和虚拟化,这使得任何一个设备上的软件都可以使用所有超级终端设备内的硬件。

第二件事是“自动跟随”。应用程序使用的其实是一个虚拟的句柄,它并非与某个特性硬件相绑定,当我们在将某个软件实体从一个设备迁移到另外一个设备时,系统中的迁移决策模块会自动将硬件也一起切换到目标设备上,使得整个用户体验是一致的。

经过上述介绍,我相信大家已经理解HarmonyOS应用框架是如何解决多设备交互问题的。

作为新一代的智能终端操作系统,HarmonyOS非常欢迎广大开发者加入我们,成为整个鸿蒙生态的一员,让我们一起,为全球几十亿用户共筑全新的商业生态以及无限可能。

想了解更多关于鸿蒙的内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#bkwz

以上是关于HarmonyOS应用框架如何解决多设备交互问题?的主要内容,如果未能解决你的问题,请参考以下文章

HarmonyOS - 实现多设备协同

HarmonyOShap包在多台设备中安装和HarmonyOS应用含多个module安装问题

远程台灯功能

HarmonyOS应用开发HarmonyOS应用开发学习指南 - HDC2020

分布式软总线让阿里巴巴商家玩转多设备直播

七华为鸿蒙HarmonyOS应用开发之Java UI框架常用Text组件和Button组件使用