首页 > 其他分享 >#打卡不停更#【FFH】浅析Ability框架中Stage模型与FA模型的差异

#打卡不停更#【FFH】浅析Ability框架中Stage模型与FA模型的差异

时间:2022-10-28 20:31:45浏览次数:97  
标签:Ability 模型 FA 组件 打卡 差异 浅析 Stage

(#打卡不停更#【FFH】浅析Ability框架中Stage模型与FA模型的差异)

Aility框架概述

Ability是应用所具备能力的抽象,也是应用程序的基本组成单元。OpenHarmony与HarmonyOS的应用程序APP由一个或多个Hap包组成,每个Hap可以包含一个或多个Ability。

Ability框架模型具有两种形态,FA模型以及Stage模型

image20221018203923931.png

  • FA模型:OpenHarmony API 8及其更早版本的应用程序只能使用FA模型进行开发。FA模型将Ability分为FA(Feature Ability)和PA(Particle Ability)两种类型,其中FA支持Page Ability,PA支持Service Ability、Data Ability、以及FormAbility

image20221019091909066.png

  • Stage模型:从OpenHarmony API 9开始,Ability框架引入了Stage模型作为第二种应用框架形态,Stage模型将Ability分为PageAbility和ExtensionAbility两大类,其中ExtensionAbility又被扩展为ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,以便满足更多的使用场景。

image20221019093942467.png

Stage模型比较新,其被设计出来就是为了让开发者能更加方便地开发出分布式环境的复杂应用,下表是官方给出的两种模型的设计差异:

image20221017222551815.png

​ 从表中可以看到,从界面UI开发上来看,两者的区别不大。

​ FA模型的设计特点就是每个Ability都是小单元,每个小单元之间都是存在隔阂的,这样可以让开发者专注于定制每个Ability的特定能力,这样在简单场景下,应用的Ability结构会比较清晰明确。

FA模型与Stage模型差异对比

进程差异

​ 单看每个进程,可以发现在FA中一个Ability只允许绑定一个JS VM(JavaScript虚拟机)引擎,Stage模型中每个进程内的JS VM引擎可以被多个Ability共享,而JS VM(JavaScript虚拟机)引擎的作用可以简单理解为读取应用中的JavaScript代码,然后进行相应处理,起到一个解释器的作用,让底层可以读懂开发人员写的代码,所以Stage模型同一个进程内的不同Ability之间是存在更多打破隔阂的可能性,涉及到同一个进程内多个Ability直接的交互开发时,性能也会更高,同时支持了一个非常重要的特性,就是进程内可以共享对象,这意味着开发者不需要考虑线程之间的对象共享,只需要聚焦在分布式的交互场景上。

image20221019133603374.png

生命周期间差异

image.png 生命周期的差异主要是圈起来的地方,也是就Ability从后台和前台之前切换的过程,FA模型中该部分比较简单,只有4个回调函数,大家看图也可以理解。

image.png

而在Stage模型中,设计者将Ability组件与窗口之间进行了弱耦合,引入了WindowStage(本地窗口管理器)的概念,WindowStage主要用于处理界面获焦状态(前台),以及失焦状态(后台),这样中间层Ability只需要感知前后台变化,而不需感知焦点变化,从而实现Ability组件和窗口之间的解耦。

解耦的目的就是为了支持多种设备形态和更易于实现多种不同的窗口形态,从而方便裁剪,更有利于定制不同的窗口形态

组件间差异

​ 从组件上来看,FA模型的Ability组件类型比较固定,而Stage模型的Ability组件类型具备拓展性

本文作者:Hagon

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

标签:Ability,模型,FA,组件,打卡,差异,浅析,Stage
From: https://blog.51cto.com/harmonyos/5803835

相关文章

  • 【ARC083F】Collecting Balls(图论模型,二分图,基环树,拓扑序)
    首先用\(2n\)个点表示每个机器人,原图中的一个球转化为图上的一条边,于是转化为一个二分图模型。我们对这个二分图的每个连通块分开考虑(假设有\(cnt\)个连通块),显然一个......
  • Struts2-001浅析
    Struts2是一个基于MVC设计模式设计模式的Web应用框架应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Stru......
  • 浅析package.json
    package.json用来描述项目及项目所依赖的模块信息。全文以npm为例package.json与package-lock.json的关系版本指定~会匹配最近的小版本依赖包,比如~1.2.......
  • 质量模型
    iso质量模型   ......
  • 算法-c#-基于朴素贝叶斯+词频向量空间模型的文本分类实现
    算法-c#-基于朴素贝叶斯+词频向量空间模型的文本分类实现一、朴素贝叶斯分类:公式:P(C|X)=P(X|C)P(C)/P(X)其中:P(C|X):后验概率P(X|C):似然概率(条......
  • Android内嵌Unity开发简单的3D动态模型
    Unity端就不仔细说了,下面主要讲Unity打包出来在Androidstudio后的操作.DEMO地址:Stringf/UnityAndroid3DModel(github.com)Unity打包Android项目:unityLibrary包bu......
  • 创建型模式02----原型模型--工厂方法模式 --抽象工厂模式
    文章目录​​原型模型​​​​定义:​​​​优点:​​​​缺点:​​​​原型模式的结构与实现​​​​模式的实现​​​​原型模式的引用场景​​​​创建型模式-工厂模式​......
  • CSS盒子 模型(box-model)
    盒子模型(box-model)CSS处理网页时,它认为每个标签都包含在一个不可见的盒子里。如果把所有的标签都想象成盒子,那么我们对网页的布局就相当于是摆放盒子。我们只需要将相......
  • Java - 简述JVM 内存模型
    JVM[来源:维基百科]程序计数器程序计数器是当前线程执行的字节码的行号指示器;程序计数器线程私有;程序计数器是JVM规范中唯一一个没有任何OutOfMemoryError的区域;虚......
  • Hugging Face发布diffuser模型AI绘画库初尝鲜!
    ......