鸿蒙Stage模型详解(新手边看)
应用模型是系统为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更加简单、高效。
Ability Kit(程序框架服务)提供了应用程序开发和运行的应用模型。可以简单地将 Ability Kit 理解为一个舞台,程序的开发以及运行都在这个舞台上进行。这个舞台只负责大的方向,比如搭建(创建)、拆除(销毁)、整个舞台的排班等。
具体来看,Ability Kit 具有以下功能:
UIAbility 与 Ability Kit 的关系是,Ability Kit 在 UIAbility 组件中可以使用 ArkUI 提供的组件、事件、动效、状态管理等能力。

图 1 Stage模型的概念图
Stage 模型支持 UIAbility 和 ExtensionAbility 两种组件,分别用于 UI 交互和特定场景的应用。
UIAbility 组件负责展示和用户互动的 UI,如图片选择,并通过 WindowStage 事件管理生命周期。
而 ExtensionAbility 组件为特定功能提供模板,如卡片、输入法或任务调度,开发者需派生特定类并实现回调。这些组件由系统管理,开发者需根据业务场景使用派生类实现功能。
UIAbility 实例与 WindowStage 绑定,通过它来控制主窗口,为 ArkUI 提供绘制区域。Stage 模型中的 Context 提供运行时资源和能力,不同组件的 Context 类继承自基类 Context 并提供各自的功能。每个 HAP 在运行期都有一个 AbilityStage 实例,负责管理和控制 HAP 的运行。
当然,bundleName 标签可以在创建应用的时候直接输入,如下图所示:

图 2 bundleName标签创建时的位置
当需要修改时,可以在工程的 AppScope 目录下的 app.json5 配置文件中进行修改,如下图所示:

图 3 app.json5与bundleName的位置
接下来配置一下应用图标、应用标签和入口图标、入口标签。
找到 app.json5 和 module.json5。下图中箭头所标识的就是修改应用图标以及应用标签的文件。

图 4 修改应用图标及应用标签的文件
下图中箭头所标识的就是修改入口图标和入口标签的文件:

图 5 修改入口图标和入口标签的文件

图 6 图标
首先在 string.json 中配置应用的标签,如下图所示:

图 7 在string.json中配置应用的标签
然后将应用图标放到 media 文件中,再在 app.json5 中进行引用,如下图所示:

图 8 在app.json5中引用
配置完成后运行到手机上进行查看,如下图所示:

图 9 手机查看配置效果
注意,打包时需要进行签名,我们可以使用自动签名查看效果,具体操作如下:
生成的自动签名如下图所示:

图 10 生成的自动签名

图 11 在module.json5中引用入口图标
入口标签的配置稍微有些烦琐,从图 11 中可以看到,在 resources 文件夹下有两个文件夹,分别是 zh_CN 和 en_US,这两个文件分别代表着中文配置和英文配置;在 base 文件夹下有一个 element 文件,如果想要配置入口标签名,需要在 element 文件下的 string.json 文件中建立索引,而它的索引会在不同的环境下查找 zh_CN、en_US 这两个文件下的内容进行展示,如下图所示。

图 12 查找zh_CN、en_US两个文件下的内容
配置完成后单击运行按钮进行查看,如下图所示:

图 13 配置完成后的效果
Ability Kit(程序框架服务)提供了应用程序开发和运行的应用模型。可以简单地将 Ability Kit 理解为一个舞台,程序的开发以及运行都在这个舞台上进行。这个舞台只负责大的方向,比如搭建(创建)、拆除(销毁)、整个舞台的排班等。
具体来看,Ability Kit 具有以下功能:
- 提供应用进程创建、销毁和应用生命周期调度的能力;
- 提供应用组件运行入口、应用组件生命周期调度、组件间交互等能力;
- 提供应用上下文环境、系统环境变化监听等能力;
- 提供应用流转能力;
- 提供多包机制、共享包、应用信息配置等能力;
- 提供程序访问控制能力。
UIAbility 与 Ability Kit 的关系是,Ability Kit 在 UIAbility 组件中可以使用 ArkUI 提供的组件、事件、动效、状态管理等能力。
Stage模型的概念图
Stage 模型的概念图如下图所示:
图 1 Stage模型的概念图
Stage 模型支持 UIAbility 和 ExtensionAbility 两种组件,分别用于 UI 交互和特定场景的应用。
UIAbility 组件负责展示和用户互动的 UI,如图片选择,并通过 WindowStage 事件管理生命周期。
而 ExtensionAbility 组件为特定功能提供模板,如卡片、输入法或任务调度,开发者需派生特定类并实现回调。这些组件由系统管理,开发者需根据业务场景使用派生类实现功能。
UIAbility 实例与 WindowStage 绑定,通过它来控制主窗口,为 ArkUI 提供绘制区域。Stage 模型中的 Context 提供运行时资源和能力,不同组件的 Context 类继承自基类 Context 并提供各自的功能。每个 HAP 在运行期都有一个 AbilityStage 实例,负责管理和控制 HAP 的运行。
应用/组件级配置
在开发应用时,需要配置一些标签,例如应用的包名、图标等。接下来将会讲解在开发应用时需要配置的一系列关键标签。1) 应用包名配置
应用需要在工程的 AppScope 目录下的 app.json5 配置文件中配置 bundleName 标签,该标签用于标识应用的唯一性。推荐采用反域名形式命名,如 com.example.demo,建议第一级为域名后缀 com,第二级为厂商/个人名,第三级为应用名,也可以多级。当然,bundleName 标签可以在创建应用的时候直接输入,如下图所示:

图 2 bundleName标签创建时的位置
当需要修改时,可以在工程的 AppScope 目录下的 app.json5 配置文件中进行修改,如下图所示:

图 3 app.json5与bundleName的位置
2) 图标和标签配置
图标和标签通常一起配置,可以分为应用图标、应用标签和入口图标、入口标签,分别对应 app.json5 配置文件和 module.json5 配置文件中的 icon 和 label 标签。接下来配置一下应用图标、应用标签和入口图标、入口标签。
找到 app.json5 和 module.json5。下图中箭头所标识的就是修改应用图标以及应用标签的文件。

图 4 修改应用图标及应用标签的文件
下图中箭头所标识的就是修改入口图标和入口标签的文件:

图 5 修改入口图标和入口标签的文件
3) 应用图标和标签配置
将下图作为应用图标和入口图标进行配置,以方便查看:
图 6 图标
首先在 string.json 中配置应用的标签,如下图所示:

图 7 在string.json中配置应用的标签
然后将应用图标放到 media 文件中,再在 app.json5 中进行引用,如下图所示:

图 8 在app.json5中引用
配置完成后运行到手机上进行查看,如下图所示:

图 9 手机查看配置效果
注意,打包时需要进行签名,我们可以使用自动签名查看效果,具体操作如下:
- 将手机调整为开发者模式。
- 用数据线将手机连接到计算机上。
- 选择“文件”→“项目结构”→Signing Configs,勾选Automatically generate signature复选框,生成自动签名,单击Apply按钮进行应用。
- 单击右上角的三角形图标(运行)按钮运行即可。
生成的自动签名如下图所示:

图 10 生成的自动签名
4) 入口图标和标签配置
入口图标的配置与应用图标的配置类似,直接将入口图标放到 media 文件中,然后在 module.json5 中引用即可,如下图所示:
图 11 在module.json5中引用入口图标
入口标签的配置稍微有些烦琐,从图 11 中可以看到,在 resources 文件夹下有两个文件夹,分别是 zh_CN 和 en_US,这两个文件分别代表着中文配置和英文配置;在 base 文件夹下有一个 element 文件,如果想要配置入口标签名,需要在 element 文件下的 string.json 文件中建立索引,而它的索引会在不同的环境下查找 zh_CN、en_US 这两个文件下的内容进行展示,如下图所示。

图 12 查找zh_CN、en_US两个文件下的内容
配置完成后单击运行按钮进行查看,如下图所示:

图 13 配置完成后的效果