news 2026/4/3 3:14:48

HarmonyOS 多页面架构设计模式总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS 多页面架构设计模式总结

——从“能跑”到“可维护、可扩展”的工程化实践

在 HarmonyOS 项目中,页面数量一旦超过 5 个,如果没有清晰的多页面架构设计,很快就会出现以下问题:

  • 路由混乱,页面之间互相跳转像“意大利面”

  • 页面状态靠参数硬传,改一个页面牵一片

  • 生命周期逻辑分散,难以统一管理

  • 后期加新功能,不敢动老代码

本文将结合Stage 模型 + ArkUI,系统性总结 HarmonyOS 多页面架构的设计模式与最佳实践,帮你把项目从“Demo 级”升级到“工程级”。


一、HarmonyOS 的多页面基础认知

在 Stage 模型下,HarmonyOS 的页面体系核心是:

Application └── Ability (UIAbility) └── Window └── Page(ArkUI 页面)

页面切换的本质

  • HarmonyOS不是 Activity 栈

  • 页面通过Router管理

  • UIAbility 通常只有 1 个(推荐)

结论
多页面 ≠ 多 Ability,而是多 Page


二、最基础的架构:单 Ability + Router 页面栈

推荐起手式

entry/ ├── pages/ │ ├── Home.ets │ ├── Detail.ets │ ├── Login.ets │ └── Profile.ets └── EntryAbility.ets

路由跳转示例

import router from '@ohos.router'; router.pushUrl({ url: 'pages/Detail', params: { id: 1001 } });

页面接收参数

@Entry @Component struct Detail { aboutToAppear() { const params = router.getParams() as { id: number }; console.info('id:', params.id); } }

✔ 简单
参数泛滥、页面强耦合


三、进阶一:路由分层设计(Router 封装模式)

问题

  • 页面中到处router.pushUrl

  • URL 写死,改路径成本极高

解决方案:统一路由层

common/ └── router/ ├── RouteMap.ts └── AppRouter.ts
RouteMap.ts
export enum RoutePath { HOME = 'pages/Home', DETAIL = 'pages/Detail', LOGIN = 'pages/Login' }
AppRouter.ts
import router from '@ohos.router'; import { RoutePath } from './RouteMap'; export class AppRouter { static toDetail(id: number) { router.pushUrl({ url: RoutePath.DETAIL, params: { id } }); } static toLogin() { router.replaceUrl({ url: RoutePath.LOGIN }); } }
页面中使用
AppRouter.toDetail(1001);

好处

  • 页面不关心路由细节

  • 路径集中管理

  • 方便后期埋点 / 权限校验


四、进阶二:页面职责拆分(Page ≠ Logic)

错误示范(典型新手写法)

@Component struct Home { async loadData() { // 网络 // 缓存 // 数据处理 } }

推荐模式:Page + ViewModel

pages/ ├── Home/ │ ├── HomePage.ets │ └── HomeViewModel.ets
HomeViewModel.ts
@ObservedV2 export class HomeVM { @Local list: string[] = [] async load() { this.list = ['A', 'B', 'C'] } }
HomePage.ets
@ComponentV2 struct HomePage { private vm = new HomeVM() aboutToAppear() { this.vm.load() } build() { List() { ForEach(this.vm.list, item => { Text(item) }) } } }

本质

  • 页面只负责展示

  • 逻辑可测试、可复用


五、进阶三:全局状态 + 页面解耦

典型场景

  • 登录状态

  • 用户信息

  • 权限信息

全局状态容器

@ObservedV2 export class AppStore { @Local isLogin = false @Local userName = '' } export const appStore = new AppStore()

页面中使用

@ComponentV2 struct Profile { build() { if (appStore.isLogin) { Text(`欢迎:${appStore.userName}`) } else { Button('去登录').onClick(() => { AppRouter.toLogin() }) } } }

页面不再直接互相依赖,而是通过状态协作


六、进阶四:多页面生命周期协同设计

常用生命周期

生命周期场景
aboutToAppear页面进入
onPageShow可见
onPageHide被覆盖
aboutToDisappear离开

推荐实践

  • 数据加载:aboutToAppear

  • 埋点 / 动画:onPageShow

  • 暂停任务:onPageHide

aboutToAppear() { this.vm.load() } onPageHide() { this.vm.pauseTimer() }

七、进阶五:模块化多页面架构(大项目必备)

目录示例

features/ ├── login/ ├── home/ ├── order/ └── profile/

每个 feature 自己管理:

  • 页面

  • ViewModel

  • 路由注册

效果

  • 模块可插拔

  • 多人协作冲突少

  • 接近 Android 的 Feature 模块化


八、HarmonyOS 多页面架构最佳实践总结

一句话总结

页面只负责 UI,路由统一管理,状态集中托管,逻辑模块化拆分

推荐组合

  • Stage 模型 + 单 UIAbility

  • Router 封装

  • ViewModel(@ObservedV2)

  • 全局 Store

  • Feature 模块化


九、结语

HarmonyOS 的多页面架构并不复杂,难点不在 API,而在工程设计意识

如果你:

  • 正在从 Android 转 HarmonyOS

  • 或正在做一个中大型鸿蒙项目

那么尽早建立清晰的多页面架构,会极大降低后期维护成本

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 10:01:07

GLM-TTS支持哪些语言?中英文混合合成效果实测分析

GLM-TTS中英文混合语音合成能力深度实测与工程实践 在智能语音助手、双语教学平台和跨境客服系统日益普及的今天,用户对语音合成技术提出了更高的要求:不仅要“能说话”,更要“说得好”、“说得自然”。尤其是面对中文与英文频繁交织的实际场…

作者头像 李华
网站建设 2026/3/25 11:27:41

[Windows] 老司机专用播放器 SecureVault Player V0.8.9

[Windows] 老司机专用播放器 SecureVault Player V0.8.9 链接:https://pan.xunlei.com/s/VOi7MPMWYLibXSL50EhOCATzA1?pwdcdvz#SecureVault Player 是一款基于 Python (PyQt6 VLC) 开发的安全视频播放器。它不仅仅是一个播放器,更是一个视频隐私保护工…

作者头像 李华
网站建设 2026/3/29 11:34:36

springboot基于vue技术的健康饮食养生信息网站的设计与实现

目录摘要关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 健康饮食养生信息网…

作者头像 李华
网站建设 2026/3/25 16:14:01

GLM-TTS与Directus CMS结合:开源内容管理新选择

GLM-TTS与Directus CMS结合:开源内容管理新选择 在数字内容爆炸式增长的今天,用户不再满足于“只看”文字。越来越多的平台开始提供音频版文章、AI朗读新闻、语音课程讲解——声音正成为内容交付的新维度。然而,传统配音依赖真人录制&#xf…

作者头像 李华
网站建设 2026/3/27 4:20:28

GLM-TTS语音克隆实战:如何用开源模型实现方言与情感控制

GLM-TTS语音克隆实战:如何用开源模型实现方言与情感控制 在短视频、虚拟主播和智能客服日益普及的今天,用户对“像人”的声音需求早已超越了简单的朗读。他们想要的是带有家乡口音的播报、饱含情绪的对话,甚至是某个特定人物的声音复刻——而…

作者头像 李华