理解 Stage 模型 —— HarmonyOS 应用架构新标准

理解 Stage 模型 —— HarmonyOS 应用架构新标准

自 HarmonyOS 3.1 起,华为正式引入 Stage 模型,并宣布 FA(Feature Ability)模型逐步废弃。到 HarmonyOS 6.0.0(API 6.0.2)  时代,Stage 模型已成为唯一推荐的应用架构标准

如果你仍在使用 FA 模型,你的应用将:

  • ❌ 无法上架新版华为应用市场;
  • ❌ 无法使用最新 UI 能力(如  高性能绘制、分布式窗口);
  • ❌ 失去对多设备协同、后台任务管理等高级特性的支持。

本文将带你从零彻底搞懂 Stage 模型,涵盖:

  • ✅ Stage vs FA 模型核心差异;
  • ✅ 、、 三大核心概念;
  • ✅ 项目结构文件(, )详解;
  • ✅ 如何获取屏幕尺寸、窗口、能力上下文;
  • ✅ 完整可运行代码示例(适配 API 6.0.2)。

所有内容均基于 DevEco Studio 4.1 + HarmonyOS 6.0.0 模拟器 实测验证。


1. FA 模型(已废弃)

FA(Feature Ability)模型是 HarmonyOS 早期采用的架构,灵感来自 Android 的 Activity/Service 模式。


FA 模型缺陷

  • 能力(Ability)与 UI 强耦合;
  • 多窗口、多实例管理复杂;
  • 缺乏统一的生命周期管理;
  • 难以支持跨设备协同。

2. Stage 模型(现代标准)

Stage 模型采用  “能力(Ability) + 窗口(Window) + 页面(Page)”三层解耦架构,更符合现代操作系统设计理念。

维度 FA 模型 Stage 模型 入口 UI 管理 Ability 直接控制 UI  管理窗口, 描述 UI 生命周期 分散在 Ability 中 统一由  和  协同管理 多实例支持 困难 原生支持(如分屏、悬浮窗) 跨设备协同 需手动实现 内置  能力

💡 核心思想
UI 与业务逻辑分离,窗口与页面解耦,能力可复用


1. UIAbility:应用的能力入口

 是 Stage 模型中承载 UI 的能力单元,相当于 FA 模型中的 ,但职责更清晰。


代码逐行解析

  • :Ability 创建时调用(适合初始化全局状态);
  • 窗口创建完成,此时可加载页面;
  • :指定主页面路径(相对于 );
  • :Ability 销毁前清理资源。

📌 关键点
UI 不再在 Ability 中定义,而是在独立的 Page 文件中描述(如 )。


2. WindowStage:窗口管理中枢

 代表一个应用窗口实例,负责:

  • 加载页面内容;
  • 管理窗口属性(大小、透明度、焦点);
  • 处理窗口生命周期事件。

典型应用场景

  • 全屏游戏:
  • 悬浮窗:通过  创建新 
  • 多窗口协同:一个 Ability 可管理多个 

3. Context:上下文获取桥梁

 是访问系统服务、资源、能力的统一入口。在 ArkTS 中,通过  获取。


关键 API

  • :在  中获取上下文;
  • :获取设备配置(屏幕宽高、DPI、语言等);
  • :获取当前  实例;
  • :访问字符串、图片等资源。

⚠️ 注意
 中的  必须是   装饰的 struct 实例,否则会报错。


Stage 模型引入了新的配置文件体系,取代 FA 模型的 。

1. :页面路由清单

路径


作用

  • 声明所有可被  加载的页面路径;
  • 路径相对于 ;
  • 必须显式注册,否则  会失败。

💡 最佳实践

  • 主页面放第一个;
  • 按功能模块组织路径(如 )。

2. :模块级配置(核心!)

路径


关键字段解析

字段 说明 主 Ability 名称,必须与  一致 Ability 的 TypeScript 入口文件路径 引用 ,声明页面集合 声明 Ability 的启动意图(如桌面图标点击)

📌 重要变化
FA 模型的  已被  +  取代,配置更模块化、可读性更强


3. :构建配置

路径:项目根目录 


作用

  • 指定兼容的 SDK 版本();
  • 配置签名、产品变体;
  • 控制是否仅运行时()。

✅ 适配提示
你的虚拟机为 API 6.0.2(22) ,此处必须匹配,否则安装失败。


场景:在页面中动态获取屏幕宽高并调整 UI


在这里插入图片描述

代码深度解析

  1. :在  中安全获取上下文;
  2. :直接读取屏幕宽高(单位:px),无需异步
  3. :获取  实例,用于访问生命周期或窗口;
  4. :同步获取主窗口(Stage 模型特有);
  5. :判断当前窗口模式(全屏/悬浮等)。

✅ 优势
所有操作均为同步调用,无回调地狱,代码简洁可靠。


❓ Q1:如何在非 UIAbility 中获取 Context?

A:通过 Ability 的  属性传递,或使用 (需权限)。

❓ Q2: 能否动态修改?

A:不能。所有页面必须在编译时注册,这是出于安全与性能考虑。

✅ 最佳实践:

  • Ability 职责单一:一个  只负责一类功能(如主界面、设置页);
  • 避免在 Page 中持有 Ability 引用:通过事件通信,而非直接调用;
  • 窗口操作放 豆包 大模型 教程 Ability 中:Page 只负责 UI 描述,窗口管理归 。

维度 价值 架构清晰 Ability(能力) + Window(窗口) + Page(页面)三层解耦 生命周期可控 统一入口,便于资源管理与内存优化 多设备友好 原生支持手机、平板、车机、手表的窗口适配 未来-proof 华为官方唯一维护的模型,持续获得新特性

🚀 行动建议

  • 新项目必须使用 Stage 模型
  • 老 FA 项目尽快迁移(华为提供迁移工具);
  • 深入理解  与  的协作机制。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/278538.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 上午7:20
下一篇 2026年3月14日 上午7:21


相关推荐

关注全栈程序员社区公众号