刚刚过去的2020年底,华为发布了HarmonyOS 2.0手机应用开发者Beta版。对外界,HarmonyOS提出了为万物互联而生,让体验天生跨端,并且开发跨端应用就像单端一样简单。其中,“分布式应用框架”是了解HarmonyOS服务跨端开发最基础的概念之一。

刚刚过去的2020年底,华为发布了HarmonyOS 2.0手机应用开发者Beta版。对外界,HarmonyOS提出了为万物互联而生,让体验天生跨端,并且开发跨端应用就像单端一样简单。其中,“分布式应用框架”是了解HarmonyOS服务跨端开发最基础的概念之一。

对于传统生态——典型如Android,要实现APP在不同设备间的互通,开发者要做的工作很多:是从底层到上层,从通信、数据管理、文件服务到UI的各部分适配和修改。而HarmonyOS将UI以下的基础服务做了封装,开发者也因此轻松了不少。

HarmonyOS在理念上,就是让原本孤立的设备,通过“分布式软总线”串联起来,并藉由“分布式数据管理”“分布式任务调度”等能力,将所有设备抽象为一个整体,构成虚拟的“超级终端”。数据在超级终端内自由流转,用户不需要在意文件或数据究竟在手机、PC还是大屏电视或其他硬件上。各种任务负载,也能由最适合的物理硬件去完成,甚至协同完成。

简单地说,是用一个HarmonyOS系统来解决IoT所有的问题。与此同时,还能降低跨端开发的难度。HarmonyOS本身隐藏了更多分布式技术的实现细节,包括分布式软总线、分布式数据管理等技术,都在系统服务层面做了抽象封装。最终,面向APP开发者的分布式应用框架引入了Ability,Ability就成为理解多端开发的关键。

据华为消费者业务软件部总裁王成录博士介绍:“Ability相当于鸿蒙应用里建筑材料的最小单元,可以单独运行在设备上,又可以根据能力的不同,在不同的设备上运行——这个能力,使我们能够做到一次业务代码的书写,就让应用跑在不同设备上的重要基础。”

究竟什么是Ability?

针对不同设备场景的应用开发,HarmonyOS在面向APP开发者时的应用框架层,包括UI编程框架、用户程序框架、Ability框架,都用于解决包括不同设备的形态差异、能力差异等问题。这三个框架所在的位置如下图所示:

本文着重谈的是其中的Ability框架。从HarmonyOS的开发者文档来看,Ability是应用所具备能力的抽象。一个应用可以包含多个Ability,且HarmonyOS支持应用以Ability为单位进行部署。Ability也是应用跨端部署的“最小迁移单元”,它可彼此间联合或单独部署。

Ability可分为FA(Feature Ability)和PA(Particle Ability)两种类型。不同类型为开发者提供不同的模板,实现不同的业务功能。不同的FA/PA,完成单一功能用户程序,基于这样的用户程序可在多设备间调度、流转、可分可合。

FA和PA是由系统统一调度的,可以被第三方程序调用集成。Ability的这种存在方式,就HarmonyOS生态构建来看,实现了功能结构的规范化与调用能力的傻瓜化。从这点来看,华为对于Ability的全局规划,可能还有更长远的生态构建目标。

也因此,Ability作为系统统一调度的单位,能够实现无需安装就使用,且自动更新;而应用开发的跨设备,则体现在,Ability本身是跨设备流转的,能够在不同的设备间接续,以及让不同设备协同提供服务,也就是分布式技术的基础。

FA(Feature Ability)的生命周期与逻辑

接下来就来看看FA和PA这两种Ability更具体的内容。FA(Feature Ability)支持Page Ability,而PA(元服务)则有Service Ability和Data Ability两种。在config.json注册文件中注册Ability时,可通过配置Ability元素中的“type”属性来指定Ability模板类型。(类似Activity在AndroidManifest.xml中注册)

首先聊聊FA(Feature Ability):FA当前主要就是Page Ability,提供与用户交互的能力。一个Page可由一个或多个AbilitySlice构成;AbilitySlice则是指应用的单个页面及其控制逻辑的总和。这比较类似于Android的Activity及其Fragment组件。

实际上,HarmonyOS中的每个页面都可以用一个FA来表示。任何一个子页面都可以用AbilitySlice来表示。尝试在DevEco Studio创建一个HarmonyOS项目,自动生成的项目会包含一个MainAbility和一个MainAbilitySlice。

MainAbility作用为设置路由,子页面MainAbilitySlice才真正负责页面中有哪些组件,每个组件的UI等。AbilitySlice常见使用场景比如页面有多种布局,需对页面进行动态布局,每种布局对应一个AbilitySlice;页面有多个tab,则每个tab对应一个AbilitySlice。比如新闻类APP,可能需要展示新闻列表的一个AbilitySlice,还需要一个展示新闻详情的AbilitySlice。

上面这张图是Page Ability的生命周期,其中的生命周期回调有onStart()、onActive()、onInactive()、onBackground()、onForeground()、onStop()。它与Activity对应的某些调用看起来类似,虽然可能并非一一对应的关系。

比如说onStart()在创建Page实例时触发,且对该实例在其生命周期内仅触发一次;Page在调用onStart()后进入INACTIVE状态。这对应到Android开发Activity的onCreat()以及onStart()。交互、失去焦点、不对用户可见、重回前台、销毁等状态,分别对应了不同的回调。这里不再详述这几种不同回调及对应状态的具体细节,开发者可以查看HarmonyOS开发者文档来具体了解。

相应的,AbilitySlice与其所属Page,有着相同的生命周期状态和同名回调。不过在同一Page中的AbilitySlice之间发生切换时,AbilitySlice本身表现为独立于Page的生命周期变化,而Page自身的生命周期状态不变。

在DevEco Studio建立的MainAbility中也能看到,页面启动自动调用onStart(),方法体中再调用setMainRoute(),路由到MainAbilitySlice。在MainAbilitySlice中,除了子页面启动时,同样自动调用onStart(),内部方法体中的setUIContent()是用于设置子页面UI内容的。UI内容则通过布局文件ability_main.xml来指定。

值得一提的是,Page是可以在同一用户的不同设备间迁移的,最终做到分布式技术中跨端设备无缝切换的特性。这一点还将在下文详述。

PA(Particle Ability)又是怎么回事?

说完FA,接下来就是PA了。PA有两个能力,即Service Ability和Data Ability,也就是服务、数据。Service Ability提供后台运行任务的能力(如音乐播放等);Data Ability用于对外部提供统一的数据访问抽象。这两者是不提供UI的。

Service Ability可由其他应用或Ability启动,即使用户切换到其他应用,Service Ability仍将在后台继续运行。整体上和Android的Service有些类似。其生命周期具体如下:

形如前文提到的Page Ability,这里不再赘述。值得一提的是,在创建一个Empty Service Ability时,更早版本的DevEco Studio向导配置会出现“visible”复选框。这个选项用于开发者选择,该创建的Service是否对其他应用程序可见。最新版本似乎已经去掉了这一选项,不过visible属性仍可以在config.json注册文件中自行添加,默认为false,如下图:

用startAbility()方法可启动另外一个Ability。另外开发者可也以通过将Intent传递给该方法来启动Service(Intent是对象间传递信息的载体,包括这里的一个Ability启动另一个Ability,或者前文Page Ability部分提到的AbilitySlice导航到另一个AbilitySlice,Intent指定启动目标并携带相关数据)。不仅是启动本地Service,也支持启动远程Service。

设置目标Service信息,通过DeviceId(设备Id)、BundleName(包名称)以及AbilityName(待启动的Ability名称)的Operation对象进行。远程Service的启动,就要求前面提到的visible属性为true。启动远程Service代码示例:

除此之外,如果Service要与其他Service Ability,或者Page Ability交互,需要创建用于连接的Connection,通过connectAbility()就能连接了。具体内容可参加HarmonyOS的开发者文档。

最后再来谈谈Data Ability。这个能力用来进行应用管理自身,以及其他应用存储数据的访问,并且提供和其他应用共享数据的方法。具体来说,Data既能用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。看起来这应该就是HarmonyOS分布式数据管理的重要组成部分了。

具体的数据可以是数据库也可以是储存的文件。Data提供对数据的增、删、改、查、打开文件等接口。这些数据的标识是通过URI地址进行的,格式如下:

创建Data Ability时,和Service一样也有visible属性可设置,用于明确是否允许其他应用访问该Data。从注册文件config.json中自动生成的代码里可以看到提供给外部访问的URI,以及访问该Data Ability时需要申请的访问权限——这个权限应该是可以自定义的:

文件存储和数据库存储的过程和方法,这里不再多做介绍。而除了Data的创建,在Data的访问上,通过DataAbilityHelper类即可访问共享数据,可以是当前应用的,也可以是其他应用提供的。其中针对数据库的Data创建和访问,涉及到一系列的方法,具体的操作参见HarmonyOS开发者文档,基本也是一看就明白的。

Ability怎么做跨端开发?

上面这些内容基本就把Ability的基本逻辑梳理清楚了,对逻辑有个大致概念后,具体开发就比较简单的。不过更多人关心的,应该是用Ability如何做分布式跨端开发。

前文有关FA、PA的介绍中,多多少少也都谈到了远程或者跨端Ability切换或访问。以Page Ability为例,前文就提到了跨设备迁移的问题,即将Page在同一用户的不同设备间迁移。

王成录博士在谈京东直播购物跨端功能开发时,提到的实际上就是Page的迁移。当时王成录博士说:“基于编程框架,一个人一天就能做这样一个很好的应用体验。对开发者而言,四条语句,调几个函数,就能完成这样的功能了。”

上面这张PPT包含的几个步骤主要是,从设备A上的Page请求迁移;HarmonyOS处理迁移任务,并回调设备A上Page的保存数据方法,用于保存迁移必须的数据;最终HarmonyOS在设备B上启动同一个Page,并回调其恢复数据方法。

这种形式的迁移,本质上属于HarmonyOS中的“分布式任务调度平台”。这个平台可对多设备构成的超级终端提供统一的组件管理能力,为应用定义统一的能力基线、接口形式、数据结构、服务描述语言,以屏蔽应差异;支持远程启动、远程调用、业务无缝迁移等分布式任务。

这套操作实现的,就是Ability跨设备的启动/关闭、连接/断开连接,以及迁移能力。不仅是Page,各种Ability的跨设备操作还另外有其设定。总结分布式开发的本质,对开发者而言也就是Ability自由调度、流转、可分可合的逻辑。

在HarmonyOS 2.0手机应用开发者Beta发布活动上,华为还以畅连通话功能为例,提到了FA/PA设计案例。这项功能按特性总共拆分为5个FA、6个PA。PA的拆分原则为可复用/替换,基于设备间能力存在差异的考虑,以及可以跨设备调用。

经过上面的分析,这张列出FA与PA设计的架构图应该就相当易于理解了。而Ability的存在,一方面显得直观,另一方面我们认为其核心还是在于针对分布式、跨端开发的简单和友好:跨端开发过程,就和本地开发差不多,而且不需要涉及到往下(包括通讯)的层级。所以Ability才是HarmonyOS分布式技术存在的基础,而华为在Ability的具体实现上应该是投入了海量精力的。

本文从HarmonyOS整体框架切入,对HarmonyOS中的“Ability”定义及工作原理进行了诠释,旨在帮忙广大开发者们进一步理解HarmonyOS核心特性的原理所在,可以说Ability是HarmonyOS入口多样性以及生态开放性的基因所在,笔者相信自带这样基因的HarmonyOS在万物互联的时代,定会为应开发者们带来更为广阔的跨端交互创新空间。也正是这一系列分布式技术,为应用带来了更多入口、更好体验。

责编:Yvonne Geng

本文为EET电子工程专辑原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
阅读全文,请先
您可能感兴趣
通过机器学习技术,EDA工具可以获取更精确的模型来预测设计中存在的问题,如布线拥塞、信号干扰、热效应等,从而为用户提供更准确快速的指导,避免后期返工。
该小组汇集了国内外领先的芯片及IP、嵌入式开发工具、操作系统等厂商,形成强有力的组织,使命是通过一站式功能安全认证服务,帮助企业提升认证价值,满足IEC 61508、ISO 26262等国际功能安全认证标准,从而更高效地达成功能安全要求。
王长明和他的团队开发了一套针对癫痫患者的认知和情绪管理的数字化方案。该方案包括电子化认知功能评估、在线认知训练以及自助式心理治疗三个部分,旨在通过数字化的手段,为患者提供全面、个性化的干预和治疗。
为了应对孤独症治疗的挑战,千丘智能团队开发了一系列基于虚拟现实(VR)和扩展现实(XR)技术的数字疗法产品……
何同学在视频中声称“我们专门写了一个软件”,但随后被网友指出,该软件实际上是GitHub上的开源项目“ASCII generator”,并且何同学在视频中删除了原作者的信息。
随着工艺技术的发展放缓而晶体管数量增加,芯片开发变得越来越困难。Synopsys选择了收购设计分析和仿真巨头Ansys,此后,拥有管理和优化 EDA 计算环境所需所有工具的Altair,成为了最后一个可以挑战 Ansys 而不受约束的玩家。如今,花落西门子……
目前,智能终端NFC功能的使用频率越来越高,面对新场景新需求,ITMA多家成员单位一起联合推动iTAP(智能无感接近式协议)标准化项目,预计25年上半年发布1.0标准,通过功能测试、兼容性测试,确保新技术产业应用。
中科院微电子所集成电路制造技术重点实验室刘明院士团队提出了一种基于记忆交叉阵列的符号知识表示解决方案,首次实验演示并验证了忆阻神经-模糊硬件系统在无监督、有监督和迁移学习任务中的应用……
C&K Switches EITS系列直角照明轻触开关提供表面贴装 PIP 端子和标准通孔配置,为电信、数据中心和专业音频/视频设备等广泛应用提供创新的多功能解决方案。
投身国产浪潮向上而行,英韧科技再获“中国芯”认可
今日,长飞先进武汉基地建设再次迎来新进展——项目首批设备搬入仪式于光谷科学岛成功举办,长飞先进总裁陈重国及公司主要领导、嘉宾共同出席见证。对于半导体行业而言,厂房建设一般主要分为四个阶段:设备选型、设
近期,多个储能电站项目上新。■ 乐山电力:募资2亿建200MWh储能电站12月17日晚,乐山电力(600644.SH)公告,以简易程序向特定对象发行A股股票申请已获上交所受理,募集资金总额为2亿元。发
来源:观察者网12月18日消息,自12月2日美国发布新一轮对华芯片出口禁令以来,不断有知情人士向外媒透露拜登政府在卸任前将采取的下一步动作。美国《纽约时报》12月16日报道称,根据知情人士以及该报查阅
投资界传奇人物沃伦·巴菲特,一位94岁的亿万富翁,最近公开了他的遗嘱。其中透露了一个惊人的决定:他计划将自己99.5%的巨额财富捐赠给慈善机构,而只将0.5%留给自己的子女。这引起了大众对于巴菲特家庭
万物互联的时代浪潮中,以OLED为代表的新型显示技术,已成为人机交互、智能联结的重要端口。维信诺作为中国OLED赛道的先行者和引领者,凭借自主创新,实现了我国OLED技术的自立自强,成为中国新型显示产
有博主基于曝光的信息绘制了iPhone 17系列渲染图,对比iPhone 16系列,17系列最大变化是采用横置相机模组,背部DECO为条形跑道设计,神似谷歌Pixel 9系列,这是iPhone六年来的
阿里资产显示,随着深圳柔宇显示技术有限公司(下称:“柔宇显示”)旗下资产一拍以流拍告终,二拍将于12月24日开拍,起拍价为9.8亿元。拍卖标的包括位于深圳市龙岗区的12套不动产和一批设备类资产,其中不
又一地,新型储能机会来了?■ 印度:2032储能增长12倍,超60GW据印度国家银行SBI报告,印度准备大幅提升能源存储容量,预计到2032财年将增长12 倍,超60GW左右。这也将超过可再生能源本身
在科技浪潮翻涌的硅谷,马克·扎克伯格不仅是“脸书”帝国的掌舵人,更是以其谦逊低调的形象,在公众心中树立了独特的领袖风范。然而,在镁光灯难以触及的私人领域,扎克伯格与39岁华裔妻子普莉希拉·陈的爱情故事
亲爱的企业用户和开发者朋友们距离2024 RT-Thread开发者大会正式开幕仅剩最后3天!还没报名的小伙伴,抓紧报名噢,12月21日不见不散!大会时间与地点时间:2024年12月21日 9:30-1