Stage中的Ability
什么是Ability
Ability是HarmonyOS对应用所应具备的能力
的抽象,一个HarmonyOS应用可以有多个Ability。
在老的FA模型中,Ability被分为PageAbility、ServiceAbility和DataAbility。
但在新的Stage模型中,Ability被简化为了UIAbility和ExtensionAbility两大类。
总体上来说,FA模型适用于熟悉Web前端技术的开发者,开发轻量的、偏重于UI展示类的应用,但它有下面几个问题。
组件没有派生能力,不利于扩展。
ServiceAbility和DataAbility由于是手机后台应用,导致它容易被滥用。
每个应用实例运行在独立的虚拟机中,内存开销较多且组件之间无法共享状态。
为了解决这些问题,支持大型应用面向对象的范式开发,就出现了Stage模型。
Stage模型是以UI
为主的开发模型,主要作用是和用户交互,其它能力都通过扩展Extension
实现。
这两个模型的对比可以参考下面的表格。
对比项 | FA模型 | Stage模型 |
---|---|---|
API支持 | 会逐渐被淘汰 | API 9 及以后 |
开发语言 | Java(API 7 及以前)、C++、JS、TS、ArkTS | C++、ArkTS |
Ability类型 | PageAbility、ServiceAbility、DataAbility、FormAbility | UIAbility、ExtensionAbility |
开发方式 | Java/TS/ArkTS提供面向对象的API,JS提供类Web的API | ArkTS提供面向对象的API |
ArkUI | 声明式,与FA模型一致 | 声明式,与Stage模型一致 |
包文件 | 通过config.json 描述HAP 包和组件信息,组件名称固定 | 通过module.json5 描述HAP 包和组件信息,可以指定入口文件名 |
进程内资源共享 | 不支持 | 支持 |
引擎实例 | 每个Ability实例独享一个JSVM实例 | 多个Ability实例独享一个JSVM实例 |
UIAbility
在Stage模型中,由AbilityStage
负责创建UIAbility,然后UIAbility进入其生命周期。

官方的UIAbility中描述它有三种启动模式,但其实在代码中有四种。除了下面列出的三种,还有一个standard
。

standard(标准模式)
:每次启动Ability时,都会在应用进程中创建一个新的UIAbility实例(这个其实对应于multiton(多实例模式)
)。singleton(单实例模式)
:系统中只任何时候都只存在唯一一个UIAbility实例,这是默认的启动模式。specified(定制模式)
:根据不同的Key
来启动不同的Ability。
这几种不同的启动模式,可以在module.json5
的launchType
字段中指定。
如同Android在不同Activity
之间通过Intent
传递数据一样,HarmonyOS在不同的UIAbility之间,通过Want传递数据。

感谢支持
更多内容,请移步《超级个体》。