为什么鸿蒙不再适用 Android 分层
本文探讨了鸿蒙PC应用开发与Android分层架构的差异。作者指出,Android的分层架构(如MVVM、Clean架构)本质是为了解决移动端的生命周期管理、UI绑定和单一进程模型问题。但在鸿蒙PC环境下,这些前提条件发生根本性变化:生命周期属于任务而非页面、业务不再绑定单一UI、运行单元从页面变为任务。这导致传统的分层架构出现多窗口状态不同步、后台任务重建等问题。作者提出鸿蒙PC需要从"


大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。
我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括 前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。
技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、CSDN、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出
我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。
子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”
持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱
文章目录
引言
很多做过 Android 的开发者,在第一次真正做鸿蒙 PC 应用时,都会有一种很强烈的错位感:
代码结构看起来还能复用, 但系统行为却越来越“不受控”。
最常见的反应不是怀疑架构,而是怀疑自己:
- 是不是分层不够清晰?
- 是不是 MVVM 没写好?
- 是不是 UseCase 不够纯?
于是开始疯狂补分层。
结果却往往更糟:
层越来越多,问题却越来越底层。
这就说明一件事——问题根本不在分层写得好不好,而在分层思维本身。
Android 分层,本质解决的是什么
先别急着否定 Android。
Android 那套经典结构(MVC → MVP → MVVM → Clean)
在移动时代其实非常成功,因为它解决的是三个核心问题:
生命周期不可控
Activity / Fragment 随时可能销毁重建。
所以需要:
- ViewModel 托管状态
- Repository 托管数据
- UseCase 隔离业务
分层 = 抗生命周期波动。
UI 强依赖页面
Android 的业务通常绑定在:
单页面容器
例如:
- 一个 Activity = 一个业务入口
- Fragment 只是子视图
所以:
业务天然是“页面级”的。
分层围绕页面展开是合理的。
进程模型单一
大多数 Android App:
单任务栈 + 单窗口交互
即使有多窗口,也是弱多窗口。
因此:
业务不需要真正解耦运行时。
但鸿蒙 PC 改变的不是框架,而是“运行时世界”
真正关键的一句话:
鸿蒙 PC 不是一个 UI 平台,而是一个任务运行环境。
一旦这句话成立,Android 分层的三个前提就全部失效。
第一层失效:生命周期不再是页面级
在鸿蒙 PC:
- Ability 可以长期存在
- UI 可以反复附着 / 分离
- 多窗口共享同一业务状态
这意味着:
生命周期不再属于页面,而属于任务。
而 Android 分层始终假设:
生命周期 = View 生命周期。
这就是第一处断裂。
第二层失效:业务不再绑定单 UI
在 PC 形态下,一个业务可能:
- 同时在多个窗口展示
- 被拖拽成独立面板
- 被其他应用调用
- 在后台持续运行
此时再问一个问题:
UseCase 还属于哪个 ViewModel?
答案是:
都不属于。
因为真正的归属变成了:
任务上下文(Task Context)。
第三层失效:运行单元从“页面”变成“任务”
Android 世界里最小稳定单元是:
Activity。
但鸿蒙 PC 里变成:
Task(任务)。
任务具备:
- 独立状态
- 独立生命周期
- 可跨窗口存在
- 可被系统调度
这是一种操作系统级抽象,而不是 UI 抽象。
于是问题真正浮现
当你继续沿用 Android 分层时,会出现一个非常典型的症状:
架构看起来很干净,但行为完全混乱。
常见表现:
多窗口状态不同步
因为:
状态被锁在各自 ViewModel 里。
后台任务频繁重建
因为:
业务生命周期跟着 UI 走。
跨 Ability 协作困难
因为:
分层从未设计“跨运行单元”。
真正的分水岭:从“分层架构”到“任务架构”
这里是整篇文章最关键的一句话:
鸿蒙 PC 不是不需要分层,而是分层的位置变了。
Android:
UI → ViewModel → UseCase → Repository
鸿蒙 PC 更接近:
UI → Task → Domain → Capability
注意变化:
分层的中心从 ViewModel 变成 Task。
为什么这是架构级变化,而不是技术细节
因为它影响三件最核心的事:
状态归属
- Android:页面
- 鸿蒙 PC:任务
生命周期边界
- Android:UI 控制
- 鸿蒙 PC:系统调度
协作方式
- Android:页面跳转
- 鸿蒙 PC:任务协同
更多推荐



所有评论(0)