鸿蒙 NEXT 开发 -stage 模型
1. 基本介绍
应用模型是 HarmonyOS 为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。
应用模型包含几个要素应用组件**-**应用进程-应用线程-应用任务管理-应用配置文件
随着系统的演进发展,HarmonyOS 先后提供了两种应用模型:
Stage 模型: HarmonyOS API 9 开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了 AbilityStage、WindowStage 等类作为应用组件和 Window 窗口的“舞台”,因此称这种应用模型为 Stage 模型。
FA(Feature Ability)模型: HarmonyOS API 7 开始支持的模型,已经不再主推。
Stage 模型与 FA 模型最大的区别在于:Stage 模型中,多个应用组件共享同一个 ArkTS 引擎实例;而 FA 模型中,每个应用组件独享一个 ArkTS 引擎实例。因此在 Stage 模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。Stage 模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。
注:stage 模型官方文档地址:文档中心
总结:应用模型是开发鸿蒙应用的基础底座,但是鸿蒙先后推出了 FA 和 Stage,鸿蒙 4.0 和鸿蒙 Next 都将 Stage 作为主推方向,所以我们主要基于 Stage 模型来学习和开发我们目前的应用。
2. Stage 模型-应用配置文件
目录结构

工程项目目录里面的 AppScope 下面的 app.json5 应用配置

应用包名配置:
应用需要在工程的 AppScope 目录下的 app.json5 中配置 bundleName 标签,该标签用于标识应用的唯一性。推荐采用反域名形式命名(如 com.example.demo,建议第一级为域名后缀 com,第二级为厂商/个人名,第三级为应用名,也可以多级)。
图标和标签配置
图标和标签通常一起配置,对应 app.json5 配置文件和 module.json5 配置文件中的 icon 和 label 标签。
app.json5 配置文件的图标和标签配置
应用场景
用于在应用界面内展示当前应用,例如:
设置应用中,展示应用列表
在隐私管理中,展示应用申请的权限

module.json5 配置文件的图标和标签配置
应用场景
应用安装完成后在设备桌面上显示出来的图标和标签,应用场景如下:
桌面上需要显示图标时
最近任务列表中显示时

Module 支持的设备类型配置
Module 支持的设备类型需要在 module.json5 配置文件中配置 deviceTypes 标签,如果 deviceTypes 标签中添加了某种设备,则表明当前的 Module 支持在该设备上运行。
Module 权限配置
Module 访问系统或其他应用受保护部分所需的权限信息需要在 module.json5 配置文件中配置 requestPermissions 标签。该标签用于声明需要申请权限的名称、申请权限的原因以及权限使用的场景。
3. Stage 模型-UIAbility 组件简单介绍
UIAbility 组件是一种包含 UI 的应用组件,主要用于和用户交互。每一个 UIAbility 实例,都对应一个最近任务列表中的任务
一个应用可以有一个 UIAbility 也可以有多个 UIAbility,例如,在支付应用中,可以将入口功能和收付款功能分别配置为独立的 UIAbility。
单 UIAbility:任务列表只有一个任务
多 UIAbility:任务列表中会有多个任务
对于开发者而言,可以根据具体场景选择单个还是多个 UIAbility,划分建议如下:
如果开发者希望在任务视图中看到一个任务,则建议使用一个 UIAbility,多个页面的方式。
如果开发者希望在任务视图中看到多个任务,或者需要同时开启多个窗口,则建议使用多个 UIAbility 开发不同的模块功能。
为使应用能够正常使用 UIAbility,需要在 module.json5 配置文件的 abilities 标签中声明 UIAbility 的名称、入口、标签等相关信息。
[图片上传失败...(image-4ccbbf-1743386598266)]
上述文件不用我们手动填写,我们新建 ability 的时候,会自动填入
UIAbility 组件的基本用法包括:指定 UIAbility 的启动页面以及获取 UIAbility 的上下文 UIAbilityContext。
指定 UIAbility 的启动页面
应用中的 UIAbility 在启动过程中,需要指定启动页面,否则应用启动后会因为没有默认加载页面而导致白屏。可以在 UIAbility 的 onWindowStageCreate()生命周期回调中,通过 WindowStage 对象的 loadContent()方法设置启动页面。

在 DevEco Studio 中创建的 UIAbility 中,该 UIAbility 实例默认会加载 Index 页面,根据需要将 Index 页面路径替换为需要的页面路径即可。
获取 UIAbility 的上下文信息
UIAbility 类拥有自身的上下文信息,该信息为 UIAbilityContext 类的实例,UIAbilityContext 类拥有 abilityInfo、currentHapModuleInfo 等属性。通过 UIAbilityContext 可以获取 UIAbility 的相关配置信息,如包代码路径、Bundle 名称、Ability 名称和应用程序需要的环境状态等属性信息,以及可以获取操作 UIAbility 实例的方法(如 startAbility()、connectServiceExtensionAbility()、terminateSelf()等)。
如果需要在页面中获得当前 Ability 的 Context,可调用 getContext 接口获取当前页面关联的 UIAbilityContext 或 ExtensionContext。
在 UIAbility 中可以通过 this.context 获取 UIAbility 实例的上下文信息。

在页面中获取 UIAbility 实例的上下文信息,包括导入依赖资源 context 模块和在组件中定义一个 context 变量两个部分。

也可以在导入依赖资源 context 模块后,在具体使用 UIAbilityContext 前进行变量定义。
华为官方文档地址:文档中心
版权声明: 本文为 InfoQ 作者【东林知识库】的原创文章。
原文链接:【http://xie.infoq.cn/article/96e469ae2e2d4800f8e4175cf】。文章转载请联系作者。
评论