购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3
HarmonyOS基本设计理念

和当前智能终端操作系统以单设备为主的设计理念不同,HarmonyOS的设计理念是在设备多样的场景下,突破单设备的能力局限,加速信息在设备之间顺畅地流动,为用户提供完整、一致和便捷的分布式体验。为了方便描述,我们引入了一个新的抽象概念——超级终端。超级终端是指用户在不同场景下使用的各种智能终端通过HarmonyOS自动协同组成的逻辑终端。超级终端包含各种类型的智能终端,是HarmonyOS管理的抽象终端,对用户而言,它就像一个终端。HarmonyOS的设计理念,是一切从体验入手,为用户提供超级终端的操控体验;为用户程序开发者提供“一次开发,多端部署”的用户程序开发体验;为设备开发者提供积木化拼装的设备开发体验。

2.3.1 超级终端的用户体验

传统的单机操作系统提供了对插接在物理主板上的硬件设备进行管理的能力,而超级终端系统不再依赖于物理接口的连接,其管理的是通过无线/有线网络连接在一起的多台物理设备。超级终端具有如下特征。

第一,超级终端是一个逻辑集合,单一类型的多台设备或者不同类型的多台设备都可以组成超级终端,例如两部手机,一部手机与一台平板计算机,或者一个智能手表、一台车机和两部手机,等等。接入超级终端的具体形态是多样的,系统并不要求有某个特定类型设备的存在。

第二,超级终端打破了单台物理设备的边界,将组成超级终端的所有设备的软硬件资源(包括CPU、内存、存储、网络、显示器、传感器等硬件资源,以及文件、数据、系统服务、用户程序等软件资源)进行整合,形成一个统一的资源池,提供给系统服务和用户程序使用,软件可使用简单归一的访问方式访问不同物理设备上的硬件资源。

第三,超级终端的硬件能力是动态变化的,并非一成不变。组成超级终端的物理设备在不同的时间和空间可能存在不同的硬件组合。譬如,某一时刻,某一物理设备掉电或离开当前网络后,超级终端会失去某些硬件能力;另一时刻,某一物理设备加入超级终端,超级终端会得到某些硬件能力。

超级终端并非物理设备的简单叠加,它既利用了每台设备的特征,又屏蔽了设备之间的差异,它是从系统底层开始,自下而上地进行逻辑和业务的整合。

1.超级终端涉及的典型设备

基于HarmonyOS构成的超级终端本质上是分布式系统,并无真正的中心设备,只是随用户操作的场景不同,存在逻辑上的临时中心设备。每种类型的HarmonyOS设备都具备一些独有特征,在不同场景下,在超级终端中承担不同的职责。几种典型设备说明如下。

智能手机/平板计算机: 具有较强的计算能力和较高的便携性,可存储大量的用户数据。智能手机通常(但并非必须)是超级终端的中心设备,而具有更大屏幕的平板计算机,通常在阅读、影音娱乐及轻办公场景下处于中心地位。

PC: 主要用于办公领域,其便携性弱于平板计算机,支持较复杂的软件操作,在办公等复杂场景中处于中心地位。典型产品如便携式计算机等。

可穿戴设备: 可提供时间和用户健康信息数据,比手机具有更高的用户触达时效性,常在运动、健康场景中处于中心地位。典型产品如智能手表、智能手环等。

车机设备: 可满足用户出行、驾驶过程中的信息获取和娱乐需求,电源供应更持久,常在出行场景中处于中心地位。

XR设备: 从消费电子产品的角度来看,通常是娱乐设备,也可用于工业与医疗行业。典型产品如AR/VR产品。

智能电视: 具备较强的智慧化能力和媒体处理能力、超大的显示屏幕及持久在线能力,常在家庭娱乐场景中处于中心地位。

音频设备: 分为音频输入设备和音频输出设备,可提供与用户的语音交互能力和影音娱乐的音频播放能力。典型产品如耳机、智能音箱等。

网络设备: 具有强大的网络接入能力、较强的计算能力和持久在线能力,部分网络设备(如部分型号的家用路由器)还具备大容量的存储能力。

智能家电: 可提供家用设备的自动控制功能,部分智能家电可提供远程控制或跨端控制能力。典型产品如智能电冰箱、智能空调、智能窗帘、智能门锁、智能灯具、智能摄像头、智能烤箱、智能油烟机、智能电饭煲、体脂秤等。

需要说明的是,超级终端包含的设备不是固定不变的,随着生态发展,会有更多类型的设备添加到超级终端中。

2.超级终端典型交互方式

回顾人机交互的发展史,可以看到,随着终端设备的演进,其交互方式也经历了革命性的变化。几个关键的转变是:1868年,打字机键盘出现,字母和数字的输入逐步被键盘输入取代,键盘输入成为计算机的主要输入与操作方式;1968年,世界上的第一个鼠标诞生于美国斯坦福大学,开启了计算机世界图形人机交互方式的新纪元;1993年,IBM发布了全球第一款触摸操作的“智能手机”——IBM Simon。2007年以后,越来越多的智能手机开始采用触摸屏,典型的例子如iPhone,因其支持多点触控操作而名震一时。

然而,以上几种交互方式都只能解决单设备的问题。超级终端是跨越多台物理设备的系统,面临更加复杂的场景,以前的单机交互方式无法满足超级终端场景下的交互诉求。如果继续沿用各自单设备的交互方式,当业务在多台设备之间流转时,用户可能会感到无所适从,用户需要不断切换交互方式,满足设备的交互要求。这种交互方式是以设备为主的,不是以用户为中心的,因此在超级终端场景下,需要构建一套全新的交互方式,我们称其为“基于多设备的人—机和机—机交互”,该交互方式的核心特征如下。

一致性(Consistence): 一致性要求可跨越多台不同类型的设备,其交互方式内在是一致的,不会给用户带来困扰或理解困难。

连续性(Continuity): 连续性要求用户的交互体验可以从一台设备延续到另外一台设备,不出现中断。

互补性(Complementarity): 互补性是指借助多种设备的自身优势,彼此互补,共同完成交互任务。

简单性(Concision): 消费者可像使用单设备一样简单地使用超级终端,低学习成本是用户体验的基础。

公共性(Communality): 公共性是指可能被多人分时使用的设备要处理好在多用户间共同使用的场景。

协作性(Collaboration): 协作性解决的是多用户同时使用某台公共设备的交互问题。

对于单人多设备的交互,超级终端下的用户交互问题可以抽象为以下几个操作。

拉起: 拉起是指运行于物理设备A上的用户程序通过软件指令,使某用户程序在物理设备B上开始执行。

迁移: 迁移是指将一个处于运行态的软件实体从一台物理设备上转移到另外一台物理设备上,并且转移后能够维持其运行的上下文环境。

协同: 协同是指运行在两台物理设备上的软件实体通过交互协作的方式完成用户任务。

多人多设备的交互包括多个超级终端间的交互和一个超级终端下不同用户间的交互。

多个超级终端间的交互需要先建立不同用户设备的业务和设备互信,然后在此业务和设备互信范围内进行多人、多设备的交互,例如跨用户的数据共享、业务迁移或协同,如图2-1所示。设备互信仅支持当前业务,不允许扩大到其他业务。超级终端间的设备互信具有存续周期,例如业务结束后立即取消互信,或者业务结束并等待某一固定时间后取消互信。

一个超级终端下不同用户间的交互一般采用系统“多用户”的方式。多用户提供两种并发方式,一种是一个时间段内只允许激活一个用户,另一种是可以同时激活多个用户。同时激活多个用户也存在两种方式,一种是一次只允许一个用户在前台激活,另一种是同时允许多个用户在前台激活。多用户模式下激活用户的交互方式与单人多设备的交互方式相同,此处不赘述。

图2-1 超级终端系统抽象和交互逻辑

迁移主要解决用户在多设备之间交互的连续性问题。

当用户拥有多台物理设备时,由于其活动范围的变化,具体交互的物理设备也可能发生变化。例如,用户起初在书房用手机观看视频,随后又希望转移到客厅用电视继续观看。对操作系统而言,支持迁移需要在技术上维护软件实体的上下文环境,包括用户程序访问的数据、文件、硬件及用户程序的运行状态等。对用户来说,迁移操作应当是统一的、便捷的、高效的、无不良影响的。对于连续迁移或迁回场景,操作系统都能够确保软件实体始终维持其状态,用户进行迁移操作不应该有任何额外的操作或心理负担。

为了简化迁移过程,需要同时支持不同指令集平台间的迁移。HarmonyOS并不支持用户程序在任意执行时刻的上下文环境转移。它采用一种有限状态可重入的方式实现迁移。具体的可重入的状态及确定每个状态的数据模型集合必须由用户程序开发者定义。例如,音乐播放器的状态是由正在播放的音频文件和当前播放时长决定的,其数据模型集合是音频文件的名称和保存路径,以及当前播放时长。HarmonyOS提供封装的API,方便开发者轻松地定义、管理数据模型,并完成迁移操作。

为了保证用户交互的一致性,迁移的入口由操作系统统一提供。对于用户程序迁移后的一致性,由开发者和系统共同维护。例如,当用户程序从手机迁移到电视之后,其控件、样式、布局等应当尽可能与迁移前的状态保持一致。“一致”并不意味着“一样”,针对智能手机、平板计算机或电视屏幕的特征,其UI也应当进行相应的适配。

协同是指通过多台物理设备完成一项任务的操作,这种操作通常利用设备的互补能力。不同类型的设备,由于其算力、尺寸、便携性、外围设备能力不一样,具有不同的特点和适用的领域。利用设备的互补能力,可提升终端能力和用户体验。协同操作一定是涉及多台设备的,下面以人们常见的设备组合来举例介绍协同可以完成的功能。

智能手机+智能手表: 当用户在室外的时候,可能不方便拿出智能手机,但智能手表是随时触手可及的,这时候智能手表就可以利用智能手机的强大计算和通信能力来完成一些任务,例如付款、查看地图、回复消息等。

智能手机/平板计算机+智慧屏: 智慧屏具有更大的屏幕,通常会有多人同时观看。传统电视存在一个较大的痛点,即需要一个特定的设备来进行遥控操作。一方面,遥控器很容易丢失;另一方面,遥控器的按钮控制方式灵活度不够,已经远远落后于时代。借助超级终端的能力,可以利用智能手机或平板计算机这类更易交互的设备来完成对电视的遥控。智能手机和平板计算机还可以充当电视的副屏,为用户展示一些辅助或互动信息。

为简单起见,这里我们仅描述了两台设备组合的协同。实际上,协同完全可以发生在更多的设备之间,也未必需要两台不同类型的设备。

协同所产生的价值远超两台设备所具有的价值的简单组合。下面以典型的场景为例,介绍超级终端的具体应用,以便读者更好地理解,同时为开发者提供更多的想象空间。

教育关怀: 目前,网课已经成为K12教育主流的居家学习手段。然而,据教育部统计,使用平板计算机作为网课的教学工具使中小学生近视率上升。借助超级终端可以通过智能手机/平板计算机+智慧屏的协同,在智慧屏上播放老师的视频课程,师生互动则利用智能手机/平板计算机进行操作,并搭配智慧屏的摄像头对学生的学习情况进行人像采集、AI计算等。这种协同一方面降低了学生近视率,另一方面提高了学生的学习效率。

智慧办公: 随着移动生态的发展,用户对移动办公和轻办公的诉求越来越强烈;智能手机逐渐成为个人的数据中心,平板计算机因其屏幕的优势,开始部分取代PC,智慧屏则具有多人共享的特点。例如,办公类软件可以结合对用户的理解,在用户进行生产创作时,提供“智慧屏+平板计算机+智能手机”的协同方式,智慧屏用于查看,平板计算机用于文字输入,智能手机则辅助进行页面切换、备注等。又如,在视频会议场景下,可以利用平板计算机进行内容共享,利用智能手机进行内容选择等控制操作,方便共享数据的同时,也可以保护用户隐私。

运动健康: 越来越多的运动爱好者选择在家运动,譬如用户使用跑步机跑步时,智能手表可实时采集用户的心率等健康信息,智能手机/智慧屏等设备可提供科学健身指导与社交分享功能。

3.超级终端的管理方式
(1)账号

超级终端以所属者(即自然人)为中心,软件系统通过账号来描述自然人。超级终端建立在账号的基础上,同一个账号的多台设备属于同一个自然人,因此这些设备彼此间是默认互信的。但不同人的设备因为所属账号不同,将被互相隔离,以确保每个人的个人数据、隐私和资产的安全。考虑到不同用户之间也存在交换数据的需求,系统需要提供相应机制以进行跨账号的授权。在授权完成之后,账号不同的设备也可以进行信息交换,甚至完成迁移和协同操作。

(2)用户程序管理

若用户程序支持多设备安装,系统会自动同步用户程序图标到超级终端内其他设备的桌面上。若该用户程序在某设备上无法运行,则该设备的桌面上不会出现该用户程序的图标。若用户在超级终端上卸载某用户程序,用户程序会从超级终端内全局卸载,超级终端内所有设备的桌面都不会再显示该用户程序图标。

(3)外围设备管理

为了更好地管理超级终端内的外围设备资源,系统提供统一的外围设备管理入口——多设备控制中心。用户可以在多设备控制中心中查看和操作超级终端内的所有外围设备,如屏幕、摄像头、麦克风、扬声器等。用户在使用外围设备时,可在多设备控制中心进行相关的外围设备切换操作。例如,用户正在使用手机和家人视频聊天,通过多设备控制中心可以从手机摄像头切换到电视摄像头,这样对方就可以看到用户使用电视摄像头所拍摄到的画面;用户也可在多设备控制中心里选择其他设备的屏幕,这样可以将当前的屏幕画面投射到选择的屏幕上。

(4)数据管理

用户数据不再与单一物理设备绑定,在超级终端中,用户数据可跨设备实时同步,用户所创建的资料、图像、视频、音频等都会被保存到用户数据目录中。在超级终端中,用户程序可随时随地保存数据,在超级终端的任意终端上再次调用时都可以恢复到最后一次操作的状态。用户程序被卸载时,用户程序数据会随用户程序的卸载从超级终端中被删除,且不可被恢复。

4.超级终端的用户程序形态:原子化服务

操作系统的核心功能之一是提供用户程序的运行环境。用户程序一般指由业务开发者开发的软件实体,该实体可运行在操作系统平台上,并为最终用户提供特定服务。而用户程序一般需要基于操作系统对外开放的能力开发。作为新一代操作系统的HarmonyOS必然需要定义匹配其目标的新的用户程序框架。根据HarmonyOS的设计理念,我们试图通过理解消费者和开发者在万物互联场景下的诉求,寻找其用户程序框架的需求和输入。

(1)服务随人走,无缝在多设备上迁移

设想一个持续导航的场景,用户首先在家通过手机提前规划好出行路线;当用户来到停车场,启动车机后,导航任务自动从手机迁移到车机上;导航过程中,通知智能手表关键导航事件信息(譬如左转、右转等),智能手表通过震动提示用户;用户下车后继续使用步行或骑行导航,导航任务又自动从车机切换回到智能手机或智能手表,用户可以通过智能手机或智能手表继续使用导航服务。通过该业务场景,我们可以提炼出以下服务诉求。

服务可调度: 根据实际场景中的设备能力和策略,调度服务在合适的设备上运行;服务功能单一;服务可运行在多种设备上;服务可独立加载/运行;用户程序体积应尽可能小,以适应多种设备。

服务可组合: 服务支持和其他服务运行在同一设备或在不同设备上,通过协同为最终用户提供业务服务;服务的程序接口规范化。

服务可重入: 用户程序可在多种设备之间无缝迁移。

(2)服务找人

设想一个基于场景进行服务推荐的业务场景,用户在抵达景区或加油站时,系统根据用户的偏好自动向用户推荐景区信息服务或根据汽车油箱状态推荐加油服务。通过该业务场景,我们可以提炼出以下服务诉求。

服务免安装: 服务不用事先安装,用完不用卸载,即用即走。

服务可直达: 可一步直达具体业务,免去用户多步操作。

服务易更新: 用户体验到的是服务的最新版本。

现有智能终端操作系统提供的App主要存在一个问题:一个App包含太多功能,由众多功能组合成所谓的“超级App”,超级App功能繁杂、体积庞大,需要先下载、安装后才能使用,安装后会占用用户设备较大的存储空间,但对于大多数功能,用户极少甚至从未使用,且用户难以发现服务入口。这种现状无法实现万物互联场景下的服务随人走、按需下载、在多设备上无缝迁移、服务一步直达等关键业务体验。为了改变现状,HarmonyOS提出原子化服务这一新的用户程序设计和开发理念。

HarmonyOS用户程序由一组原子化服务组成。原子化服务是HarmonyOS用户程序的基本组成部分,具备以下关键特征。

实现单一功能: 原子化服务中的“原子”强调单一且对用户有使用价值的功能,不特别关注是否可拆分。

可被第三方调用: 原子化服务可被其他开发者在运行态调用。

系统统一调度: 原子化服务是系统调度的基本单元,譬如业务跨设备迁移基于原子化服务能力实现。

支持跨端运行: 原子化服务可以在不同类型的设备之间迁移,这就要求原子化服务必须支持在多个终端上运行。

可即点即用、即用即走: 满足一定体积要求的原子化服务不用事先安装,可按需下载,支持单独加载、运行,用完后不必手动卸载。

支持一步直达: 原子化服务对外暴露业务入口,调用时可一步直达具体业务,免去用户进入主入口后的多步操作。

对外接口规范: 原子化服务的接口满足系统定义的接口规范,方便被不同的第三方调用,对外接口支持跨版本兼容。

包占用空间小: 原子化服务可独立打包,包占用空间小,这样才能做到按需快速下载,给用户流畅的业务体验。

通过原子化服务的用户程序,HarmonyOS可为用户提供全新的多端融合体验,实现服务随人走;通过多终端协同实现复杂的多端融合体验,使多终端能力互助成为现实。

在用户使用层面,HarmonyOS上运行的用户程序有两种:传统方式的需要安装的用户程序(称作HarmonyOS应用),提供特定功能、免安装的用户程序(称作原子化服务)。

在用户程序的实现层面,能力(Ability)是HarmonyOS技术体系中对用户程序中每一个对用户有使用意义的单一特性功能集合的抽象,也称为HA(Harmony Ability,鸿蒙能力)。HA是鸿蒙用户程序的基本组成结构。鸿蒙用户程序包以App Pack(Application Package)形式发布,它由一个或多个HAP(Harmony Ability Package,鸿蒙能力程序包)及描述每个HAP属性的配置文件组成。HAP是HA的部署包。一个用户程序可以包含一个或多个HA,一个HA的代码实现中可以包含多个Ability类的实例。

HA的开发模型在所有设备上都是统一的,HA能够在不同设备上运行。HA在运行过程中通过运行上下文来获取当前设备的运行环境,包括系统服务的能力集、设备硬件规格(如屏幕分辨率和大小等)、设备系统属性(如主题、字体、深色模式等)。开发者通过对业务的“原子化”设计,抽象出不同的原子化服务,分别实现独立的HA,再通过“搭积木”的方式来实现具体的业务功能。

5.超级终端的分布式体验

HarmonyOS为了给用户提供完整的超级终端体验,除了在硬件层进行多端互助之外,还需在软件层通过分布式技术进行多端协同。一般意义上的分布式系统通常具备以下关键特征。

伸缩性: 随着负载的变化而变化,根据需要向网络添加或移除处理节点。

并发性: 多实例同时运行,多任务同时处理。

可用性: 一般采用去中心化设计,故障节点的业务可以转移到其他节点而不受影响。

透明性: 对开发者或最终用户屏蔽底层信息,向其提供抽象的逻辑单元。

一致性: 支持信息共享和消息传递,确保数据的一致性,以提高容错性、可靠性和可访问性。

传统的分布式系统需要应对海量并发业务,追求业务的高性能和高可靠性。HarmonyOS的分布式特性可为特定用户提供超级终端体验,更强调“业务随人走”的能力。

从通信角度来看,传统的分布式系统采用专有光通信网络,能够为分布式网络提供高可靠、高吞吐量的通信能力;而HarmonyOS的分布式特性基于WiFi、蓝牙或无线网络,通信环境复杂,吞吐量受限,通信链路可靠性也难以保障。

从业务类型角度来看,传统的分布式网络基于计算节点、通信节点、存储节点等,基本用于数据的处理和存储;而HarmonyOS的分布式网络还涉及用户交互事件处理等。

从电源供应角度来看,传统分布式网络有持续、稳定的电源供应,一般采用业务和性能优先原则;HarmonyOS的分布式网络中的部分设备节点为移动终端设备,需要充分考虑业务、性能和功耗的平衡。

从分布式网络构成角度来看,传统分布式网络通常使用同构对称的计算节点矩阵;HarmonyOS分布式网络连接手机、平板计算机、可穿戴设备、智能家电等异构设备,同时受限于不同设备的通信能力,是非对称式的,即HarmonyOS支持的是异构非对称的分布式。

HarmonyOS的分布式特性和传统的分布式特性的主要差异表现在“人”的因素对分布式系统的影响上。

HarmonyOS分布式采用分层设计,各层能力相互解耦,下层向上层提供能力,稳定的层间接口确保任一层实现的变动都不会对相邻层产生影响。HarmonyOS分布式分层架构如图2-2所示。

图2-2 HarmonyOS分布式分层架构

通信层分布式: 为了实现各终端设备的互相访问,需要通过通信协议把多台设备连接起来。当有新设备加入或现有设备离开时,HarmonyOS能够及时发现,并动态重构分布式网络。在HarmonyOS里,由分布式软总线子系统提供该能力。分布式软总线子系统的基本功能是发现(Discovery)、连接(Connection)、组网(Networking)和传输(Transmission)。软总线对基础通信能力(如WiFi、蓝牙、无线网络的基础数据通信能力等提供统一组织和统筹管理服务,其本身不具备基础通信能力。软总线提供多业务并发时的优先级控制及资源冲突决策,以分级提供资源,根据可用网络资源实时调整业务质量、动态QoS(Quality of Service,服务质量)调度等能力,从而构建快速发现、快速连接、动态组网及高吞吐量的传输能力,实现设备快速接入。

数据层分布式: 通过软总线技术,数据可以在多台设备之间有序流动和同步,这些数据包括设备的Profile数据、分布式文件系统元数据,以及与用户和用户程序相关的分布式数据。通过数据层分布式,实现文件、数据跨端访问,以及用户程序之间的跨端共享等,这样的能力由HarmonyOS的分布式数据管理子系统和分布式文件子系统提供。为用户提供多设备之间数据的一致性体验,是分布式数据管理面临的核心挑战。用户在不同设备上通过用户程序可以访问同一用户数据,而不感知数据具体存储在哪台设备上,系统向开发者和用户呈现全局唯一的数据视图,开发者像访问本地数据一样访问跨设备的数据,达到“数据随人走”的超级终端体验目标。

服务层分布式: 服务层分布式对超级终端中的系统资源进行统一管理,形成一个逻辑软硬件资源池,为上层用户程序提供统一的调用接口,对开发者屏蔽具体的内部实现细节。分布式任务管理支持跨设备任务调度、HA跨设备迁移和多设备协同能力。通过分布式硬件管理,完成硬件的跨设备发现、接入、硬件资源池化、全局硬件资源能力调用、业务数据与硬件资源的映射,以及多流数据同步等,达成硬件能力互助。分布式事件管理提供跨设备的系统事件和应用事件通知能力。

应用层分布式: 系统为用户程序开发提供高效的分布式用户程序开发框架,基于此框架的用户程序可最终为用户提供形形色色的超级终端体验。分布式用户程序开发框架提供数据同步和业务迁移能力:开发者只需要定义分布式对象,系统即可自动进行用户数据跨设备同步,保证设备之间数据的一致性;开发者只需要完成几个接口的回调处理,即可支持业务任务从一台设备迁移到另一台设备,高效满足超级终端的“连续性”要求。分布式用户程序开发框架还提供多端协同能力,让用户可以同时与多台设备进行协作交互,并支持将其中一台设备作为另一台设备的输入。系统还为用户程序提供基本的分布式接口调用,如跨设备拉起服务、跨设备拉起第三方HA(如音乐播放HA、导航HA)和跨设备进行跨用户程序接口调用等。

6.超级终端的硬件互助

前文提到了如何向用户提供多设备的协同体验,也就是通过多台物理设备共同完成一项任务,多设备的能力可互补,能够极大地提升单一终端的能力和用户体验。协同体验分为硬件互助和软件协同,这里我们重点讲解硬件互助。

传统操作系统中的设备彼此独立,操作系统只管理单设备的硬件资源,其他设备的硬件资源对当前设备不可见。能否打破单设备硬件的限制,联合其他设备的硬件来实现一个新的设备组合?如图2-3所示,手机作为中心设备,与电视4K屏幕、无人机外部摄像头和车载GPS组成一台虚拟设备。这台虚拟设备打破了原有手机的硬件限制,它有两个屏幕(一个是电视4K屏幕,一个是手机屏幕),除手机自身的摄像头外,还增加了一个可大范围移动的外部摄像头;支持定位能力的设备增加到两个。操作系统通过软件技术整合了4台设备,给上层用户程序提供更强大的系统能力,App可用的系统能力得到极大的扩展。譬如,用户在驾驶房车旅行途中,利用无人机提供沿途风景的俯视视角,通过房车电视4K屏幕观看无人机拍摄的实时视频,同时分享视频给远方的朋友、家人。通过手机屏幕,用户可以和朋友、家人聊天,以及对摄像头进行姿态控制,通过车载GPS可以获得比手机GPS更精准的定位服务。多台硬件设备通过能力互助,发挥各自设备的优势,为用户提供了“1+1 > 2”的业务体验。

图2-3 超级终端硬件互助示意

HarmonyOS通过软件技术将相关硬件元素抽象为不同类型的驱动文件,硬件元素包括手机处理器、电视4K屏幕、车载GPS、无人机外部摄像头,还有其他硬件设备。抽象后再将硬件元素通过虚拟化技术放入硬件资源池中进行统一管理,这样就用软件完全定义了一个全新的硬件系统,这个硬件系统是柔性的、动态变化的。一个消费者ID(账号)下的所有硬件可以组成一个超级终端,HarmonyOS统一管理放入硬件资源池中的所有硬件,并为运行在HarmonyOS上的用户程序提供可以调用这个超级终端硬件资源池中所有硬件的能力。如图2-4所示,在多摄像头直播场景下,直播App可以同时访问多个摄像头,这些摄像头分别来自手机、平板计算机和手持摄像机。用户程序就像访问本地摄像头一样访问了3台设备的摄像头,操作系统把3台设备的摄像头拼装在一起,形成一个有多个摄像头的新设备。

HarmonyOS的设计理念是要构建全场景、多设备的超级终端分布式体验,这就要求打破传统物理硬件的边界,由操作系统把相关硬件动态组合拼装,定义一个新的产品形态,用户仿佛拥有一个支持全场景的超级终端设备。从操作系统技术层面讲,实现上述设计理念的技术属于虚拟化技术,和通常的虚拟化技术相比,其虚拟化粒度更细,可达到单个数据结构和外围设备功能的粒度;而且它是跨设备的动态虚拟化。

图2-4 HarmonyOS软件定义分布式硬件

2.3.2 “一次开发,多端部署”的用户程序开发体验

原子化服务的一个关键特征是跨端运行,但不同终端之间的差异很大,如系统能力不同导致API集合不同,屏幕尺寸不一致,屏幕分辨率和纵横比有较大差异,内存大小及CPU处理能力都不尽相同。如何实现跨端运行原子化服务?如果让用户程序开发者自己完成跨端能力的开发,即使对于高级用户程序开发者也显得过于苛刻,更不必说对于大多数普通开发者了。所以,HarmonyOS在系统层面提供了一套开发和运行环境,让用户程序开发者很方便地就能开发出跨端运行的原子化服务,这就显得非常迫切和必要。

为了实现“一次开发,多端部署”,系统至少需要解决3个问题。

第一个问题是GUI的自适应问题,即超百种不同分辨率和不同尺寸的屏幕的适配问题,以及横屏、竖屏、刘海屏、圆形屏、折叠屏等各种异形屏幕的适配问题。

第二个问题是统一交互问题。不同终端的输入方式通常差异很大,譬如可能通过语音、触摸、表冠、键盘、鼠标、手写笔等输入,需要系统对不同输入方式进行统一处理。

第三个问题是不同设备的软硬件能力差异问题。

要解决这些问题,最核心的方案就是要实现用户程序与具体设备的解耦,把具体设备和用户程序结构抽象化,“一次开发,多端部署”的实现原理如图2-5所示。对GUI来讲,系统需要对物理屏幕和GUI信息结构分别进行抽象;对统一输入来讲,系统需要对设备的输入事件进行归一化抽象;对硬件能力的差异来讲,系统需要对硬件的能力集进行抽象。需要强调的一点是,原子化服务不管运行的物理设备的GUI如何变化,它要完成的核心业务能力是一致的,不会随GUI的变化而变化。而且前文提到用户在不同设备上通过用户程序可以访问同一用户数据,而不感知数据具体存储在哪台设备上,这就要求HarmonyOS的原子化服务的基本设计逻辑必须实现“GUI—业务逻辑—数据”的3层解耦。

图2-5 “一次开发,多端部署”的实现原理

1.多设备显示差异

武术家李小龙曾说过:“当你把水倒入杯子的时候,水就变成了杯子的样子;当你把水倒入瓶子的时候,水就变成了瓶子的样子;当你把水倒入茶壶的时候,水就变成了茶壶的样子。”自适应布局就是要我们把要显示的信息想象成水,把屏幕想象成一个玻璃容器。如果要显示的信息只有大小一致的文字,它就像水一样,可以很好地填满各种尺寸的屏幕。如果要显示的信息的文字大小不一致,或者包含图像、表格等其他非文字信息,该如何布局呢?HarmonyOS的解决方案是在GUI设计和开发层面提供多种响应式布局方案,即通过对屏幕进行栅格化抽象来提供不同屏幕的界面适配能力。不同设备屏幕的栅格化如图2-6所示。

注:1 inch=2.54 cm;vp即virtual pixel,虚拟像素。

图2-6 不同设备屏幕的栅格化

图2-7给出了设备屏幕栅格化后的GUI布局示例。

图2-7 设备屏幕栅格化后的GUI布局示例

可以通过改变元素的相对位置来适应环境的变化。图2-8列举了改变相对位置的5种自适应布局能力。

图2-8 改变相对位置的5种自适应布局能力

也可以通过改变元素自身尺寸来适应环境的变化。图2-9列举了改变自身尺寸的2种自适应布局能力。

图2-9 改变自身尺寸的2种自适应布局能力

通过上述布局能力的组合,可以屏蔽不同设备屏幕的显示差异,带给开发者统一的GUI设计体验。下面通过一个具体的例子来展现如何综合运用上述布局能力实现自适应布局,如图2-10所示。

图2-10 自适应布局的示例说明

2.多设备交互差异

如何对多设备的输入事件进行归一化?以缩放交互为例,在单设备场景下,譬如在手机触摸屏上,用户通过多指触控完成缩放动作,而在分布式场景下,缩放交互有多种不同的输入方式,那么,如何让用户程序更好地支持这些交互?

首先需要完成缩放交互的规则设计,如表2-1所示。

表2-1 缩放交互的规则设计

然后通过构建的交互事件归一化框架,提炼出“缩放”这一抽象事件。缩放控件只处理缩放事件,不再对鼠标、键盘、触摸屏等设备上发生的物理事件进行处理。缩放控件的处理流程如图2-11所示。

图2-11 缩放控件的处理流程

最后建立交互事件归一化框架,完成事件归一化处理,如图2-12所示。

图2-12 交互事件归一化框架原理

3.多设备能力差异

多设备能力差异主要表现为设备内存、主频差异大,硬件平台能力差异大。操作系统为了适配不同设备,需要对能力进行裁剪,无法确保所有设备的系统能力一致,用户程序开发难以实现统一开发、统一运行。为了解决这个问题,HarmonyOS提供应用层统一的开发范式,如图2-13所示,支持用户程序在不同内存设备上部署运行。

图2-13 统一的开发范式

需要指出的是,如果用户程序依赖差异化能力,用户程序需要感知当前运行的设备的具体能力,这就要求用户程序能够根据当前设备的特定能力进行相关的业务分支处理。例如,当某一设备具备GPS精准定位能力时,用户程序可以按照用户当前所处的具体位置为用户推荐业务;当该设备不具备GPS精准定位能力,而具备粗粒度的网络定位能力时,用户程序可以按距离用户位置的远近为用户推荐业务;当该设备不具备定位能力时,则不向用户推荐业务。HarmonyOS通过SystemCapability对设备能力进行抽象描述,用户程序可以通过相关API来查询当前设备是否支持某一能力,如图2-14所示。

图2-14 通过SystemCapability对设备能力进行抽象描述

2.3.3 积木化拼装的设备开发体验

和传统操作系统不同,HarmonyOS支持积木化拼装。也就是说,HarmonyOS提供一套“积木”,开发者可以根据自己的设备能力、产品特征和业务需求等自主拼装一个操作系统。需要特别指出的是,拼装基于一定的规则,不是随心所欲的。换句话说,不管开发者如何天马行空,拼装后的结果仍然是一个可运行的操作系统。“统一OS,弹性部署”是HarmonyOS区别于其他操作系统的关键特征。业界也有个别操作系统支持对部分系统能力的裁剪,但裁剪难度很大,很多“积木”间由于耦合度高,往往牵一发而动全身,基本难以达成理想的目标。HarmonyOS的目标是为用户带来超级终端的统一体验,这就要求必须为开发者提供“一次开发,多端部署”的用户程序开发体验,不同类型的设备必须使用统一操作系统。否则,超级终端的统一体验便无从谈起。

为了支持“统一OS,弹性部署”,HarmonyOS参考机械装配领域零部件的概念,在软件架构设计中引入部件(part)的概念。部件是指在部署视图中具有相对独立性、能完成一定功能、可独立交付,但是不能独立部署的软件实体。HarmonyOS采用完全部件化的架构设计,并尽可能地减少部件间的耦合,除了基本的核心部件之外,大多数部件均可裁剪。为了支持在不同类型的设备上部署HarmonyOS,并使这些设备能够组成一个超级终端,HarmonyOS定义了BCG(Basic Components Group,基础部件组)和OCG(Optional Components Group,可选部件组)。BCG是不可裁剪的,以确保设备的基础系统能力可用性和跨设备的互操作性。OCG是可裁剪的,以弥补设备能力的差异性。

为了确保用户程序在不同设备之间流转和迁移,要求高级别的设备能够完整地支持低设备的BCG,也就是说低级别设备的BCG是高级别设备BCG的真子集。

为了进一步降低设备开发者的拼装难度,HarmonyOS还为开发者提供了一套工具链——HPM(HarmonyOS Package Manager,HarmonyOS包管理器)。开发者只需要输入特性名称、关键特征或部件名称等信息,HPM就会自动获取相关部件的代码仓及其依赖的代码仓,并下载这些代码仓,完成编译构建等操作。拼装完成后,系统自动完成当前设备的系统能力抽象,这极大降低了开发者的装配难度。 IWV+O5pjSDFYJliRE5Jwc7f74Z3fTdB2Og0CpWiKTdGJmt9K5tHp7M73p7n5RL/M

点击中间区域
呼出菜单
上一章
目录
下一章
×