你还在用 FA 模型“硬怼”鸿蒙开发?Stage 模型都把路铺好了你不走?

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
🌟前言:我得先“吐槽”一句(带点真情实感)😄
讲真哈,很多同学第一次做 HarmonyOS 应用,最容易掉进一个坑:拿着 Android 的思维 + FA 模型的旧习惯,去硬刚 Stage 模型。
结果就是——目录看不懂、模块分不清、生命周期混成一锅粥,调试时像在和系统“猜拳”✊✋✌️。
别慌!Stage 模型其实挺“讲道理”的:它更像现代应用工程体系,强调模块化、路由与生命周期的清晰边界。你把它当成“升级版工程架构”,一下就顺了。来,我带你把这块啃透!🦷✨
📚目录导航(本节:Stage 模型应用开发基础)🧭
- 🆚 Stage 模型 vs FA 模型:到底差在哪?
- 📦 应用包结构:APP / HAP 到底是啥关系?
- 🧩 Entry / Feature 模块:主模块和能力模块怎么拆?
- 🧠 Ability 组件:UIAbility 是“新主角”
- ⏱️ 生命周期管理:别再把 onCreate 当万能钥匙了!
- 🧪 实战小 Demo:一个 Stage 工程从结构到生命周期日志(带代码)
🆚1) Stage 模型 vs FA 模型:一个“工程化”,一个“历史包袱”🤣
先说结论:Stage 模型是推荐主流,FA 模型更偏历史兼容与过渡。
你可以把它们理解成两代开发范式:
🧱FA 模型(Feature Ability)——“老派单元式”
- 以 Ability 为中心(FeatureAbility、ServiceAbility 等)
- 工程组织相对“直给”,但模块化与扩展性差一点
- 对新一代 ArkUI/ArkTS 体系衔接不如 Stage 顺滑
- 更像:能用,但不够舒服
🚀Stage 模型(Stage Ability / UIAbility)——“现代工程化”
- 以 模块化 + 生命周期更清晰 为核心
- 主要使用 UIAbility + AbilityStage 组织应用运行
- 更贴合 ArkTS/ArkUI 声明式 UI 与新工程体系
- 更像:官方给你铺好的高速路🛣️
😄一句人话:
FA 模型像“旧城区小巷子”,能到目的地但容易绕;Stage 模型像“新修高架桥”,路线清晰还省油。
📦2) 应用包结构:APP / HAP 是什么关系?(别再把它俩当对立了)📦📦
这块很多人第一次看到就懵:怎么又 APP 又 HAP?我到底交付哪个?
别急,我们用“套娃”思路解释最清楚👇
🧷HAP(Harmony Ability Package)
- 模块级交付包
- 通常一个模块(Entry / Feature)编译出来就是一个 HAP
- 里面包含该模块的资源、代码、配置(module.json5 等)
🎒APP(Application Package)
- 应用级交付包(可以包含多个 HAP)
- 你可以理解成:APP = 一个应用的“总包裹”,里面装多个“模块包裹”(HAP)
🧠关键关系:
一个 APP 可以包含多个 HAP ✅
比如:主入口 HAP + 若干 Feature HAP(按需能力、分发、设备类型差异等)。
🧩3) Entry / Feature 模块:怎么拆才像个“正经工程”?🧰
Stage 模型的模块化思路非常明确:
🚪Entry 模块(主入口)
- 应用的“主模块”
- 通常包含:主 UIAbility、启动页面、核心资源
- 负责承载应用最基本的启动路径
🧩Feature 模块(能力扩展)
- 可选能力模块(比如:支付、地图、会员、设备协同等)
- 适合拆分:大型功能、可复用功能、差异化部署功能
- 更利于:多人协作、按需加载、版本迭代
😏我给你一个“工程味儿很浓”的拆分口诀:
Entry 放“必进门的”,Feature 放“可选房间的”。
主流程不进门就不能用的,就别拆出去折磨自己;能独立升级、独立维护、独立复用的,拆 Feature 才香。
🧠4) Ability 组件:UIAbility 才是 Stage 模型的“C 位”👑
在 Stage 模型里,UIAbility 是页面/交互能力的核心载体。你可以把它理解成:
- 它既承担 UI 容器职责
- 又拥有更“现代”的生命周期管理方式
- 能更好地跟 ArkUI 页面(Page)衔接
另外还有一个经常被忽略但很重要的角色:
🎭AbilityStage(应用运行舞台)
- 类似应用级的“舞台管理者”
- 负责管理该模块下 Ability 的整体运行状态
- 你可以在这里做模块级初始化(别啥都塞 UIAbility 里)
😂一句吐槽:
别把 UIAbility 当垃圾桶。
初始化、路由、资源准备、全局状态……乱塞进去,后期你会想给过去的自己寄律师函。
⏱️5) 生命周期管理:别再“一个 onCreate 走天下”了🙃
Stage 模型的生命周期更强调:
- 应用/模块级:AbilityStage
- 页面/交互级:UIAbility
- 页面组件级:ArkUI @Entry Component 的状态管理
✅UIAbility 常见生命周期(你至少要熟)
onCreate():创建时调用,适合轻量初始化onWindowStageCreate():窗口舞台创建,适合设置主页面loadContent()onForeground():到前台onBackground():到后台onDestroy():销毁释放资源
🧠最实用的经验:
- UI 相关初始化:尽量放
onWindowStageCreate()- 资源释放、断连:放
onBackground()/onDestroy()- 不要在 onCreate 里塞重活:启动卡顿会骂你(真的会)😅
🧪6) 实战小 Demo:用日志把 Stage 生命周期“跑一遍”🏃♂️💨
下面给你一个非常实用的 ArkTS 示例:
目标:你一运行就能在日志里看到生命周期顺序,这玩意儿调试时贼好用。
✅ EntryAbility.ets(UIAbility 示例)
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility {
onCreate(want: any, launchParam: any) {
console.info('😄 [EntryAbility] onCreate');
}
onWindowStageCreate(windowStage: window.WindowStage) {
console.info('🪟 [EntryAbility] onWindowStageCreate');
// ⭐在这里加载页面最合适:UI准备就绪
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
console.error(`❌ loadContent failed: ${JSON.stringify(err)}`);
return;
}
console.info('✅ loadContent success');
});
}
onForeground() {
console.info('🌞 [EntryAbility] onForeground');
}
onBackground() {
console.info('🌙 [EntryAbility] onBackground');
}
onWindowStageDestroy() {
console.info('🧹 [EntryAbility] onWindowStageDestroy');
}
onDestroy() {
console.info('🧨 [EntryAbility] onDestroy');
}
}
✅ pages/Index.ets(最小页面)
@Entry
@Component
struct Index {
build() {
Column() {
Text('🚀 Stage 模型:Hello UIAbility!')
.fontSize(20)
Text('😏 打开日志看看生命周期顺序~')
.margin({ top: 12 })
}.padding(20)
}
}
🎯你会在日志里看到大致顺序:
onCreate→onWindowStageCreate→loadContent success→onForeground
切后台:onBackground
返回前台:onForeground
关闭/销毁:onWindowStageDestroy→onDestroy
(具体细节会随设备/系统策略略有差别,但大体规律就是这样。)
✅本节小结(给你一个“带走就能用”的总结)🎒
- Stage 模型是主流:更工程化、更适配 ArkTS/ArkUI
- APP 是应用总包,HAP 是模块包:APP 可包含多个 HAP
- Entry 是必需主模块,Feature 是可选能力模块:拆分要讲策略
- UIAbility 是页面能力核心:别把初始化全塞 onCreate
- 生命周期要分层:AbilityStage(模块级)+ UIAbility(交互级)+ ArkUI(组件级)
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌(全网一个名),CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
- 点赞
- 收藏
- 关注作者
评论(0)