传统 App 与鸿蒙 ArkUI:UI 架构差异解析

传统 App 与鸿蒙 ArkUI:UI 架构差异解析
在这里插入图片描述

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名)

大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、ZEEKLOG、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出

我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

文章目录

引言

如果你过去做过 iOS、Android 或 Flutter 开发,大概率已经形成了一套非常熟悉的 UI 架构思维:

  • 页面(Page / ViewController)
  • 组件(View / Widget)
  • 状态(State)
  • 路由(Router)

换句话说,大多数传统 App 的 UI 架构,其实都围绕一个核心展开:

页面(Page)

页面负责:

  • 承载 UI
  • 管理状态
  • 响应用户事件
  • 调用业务逻辑

但当开发者开始接触 鸿蒙 ArkUI 时,很快会发现一件事情:

ArkUI 的 UI 架构思维,并不是传统 App 那一套。

很多 iOS / Android 开发者第一次写 ArkUI 时都会有一种感觉:

  • UI 写法很像 SwiftUI / Compose
  • 但系统结构又完全不同
  • 页面概念似乎被“弱化”了

这背后的原因,其实是:

鸿蒙 UI 架构从一开始就不是为“单设备 App”设计的。

而是为 分布式系统 UI 设计的。

传统 App 的 UI 架构是怎样的

在理解 ArkUI 之前,我们先看传统 App 的 UI 结构。几乎所有移动 App 都遵循类似结构:

App ├── Tab │ ├── Page │ │ ├── View │ │ ├── View │ │ └── View │ └── Page └── Page 

典型流程是:

用户 → 打开 App → 进入页面 → 与组件交互

核心结构就是:

页面 → 组件 → 状态

页面是 UI 的核心容器

在 iOS 中,一个页面通常就是一个 UIViewController

classArticleViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()let label =UILabel() label.text ="Hello iOS" view.addSubview(label)}}

在 Android 中:

class ArticleActivity :AppCompatActivity(){overridefunonCreate(savedInstanceState: Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_article)}}

在 Flutter 中:

classArticlePageextendsStatelessWidget{@overrideWidgetbuild(BuildContext context){returnScaffold( body:Text("Hello Flutter"),);}}

这些 UI 框架虽然写法不同,但核心思想是一致的:

UI 必须挂在页面下面。

页面是:

  • 生命周期中心
  • 状态中心
  • UI 渲染中心

ArkUI 的 UI 架构为什么不同

在 ArkUI 中,你很少看到:

  • Activity
  • ViewController
  • Fragment

ArkUI 的核心不是“页面类”,而是:

组件(Component)

页面只是一个 组件入口

ArkUI 页面其实是一个组件

例如一个简单 ArkUI 页面:

@Entry@Component struct HomePage {build(){Column(){Text("Hello ArkUI").fontSize(24)Button("点击")}}}

这里看起来像是“页面”,但实际上:

HomePage └── Column ├── Text └── Button 

ArkUI 的 UI 本质是:

组件树(Component Tree)

而不是页面树。

状态管理方式的差异

传统 App 的状态通常放在:

  • ViewController
  • ViewModel
  • Bloc
  • Store

但 ArkUI 更强调:

响应式状态

ArkUI 响应式状态

@Entry@Component struct CounterPage {@State count:number=0build(){Column(){Text(`Count: ${this.count}`).fontSize(30)Button("增加").onClick(()=>{this.count++})}}}

这里有一个关键变化:

状态变化 → UI 自动更新 

开发者不需要:

  • 手动刷新 UI
  • 通知 View
  • 调用 setState

ArkUI 会自动完成。

传统 UI 更新 vs ArkUI 更新

传统 UI 更新逻辑:

用户点击 ↓ 修改状态 ↓ 通知 UI 更新 ↓ 重新渲染 

例如 Flutter:

setState((){ count++;});

而 ArkUI:

this.count++

ArkUI 会自动触发 UI 更新,本质是:

声明式 UI + 响应式状态

组件复用方式的差异

传统 App 的 UI 复用通常通过:

  • 自定义 View
  • 自定义 Widget
  • Fragment

例如 Flutter:

classCardViewextendsStatelessWidget{finalString title;CardView(this.title);@overrideWidgetbuild(BuildContext context){returnCard( child:Text(title),);}}

而 ArkUI:

@Component struct CardView { title:stringbuild(){Row(){Text(this.title)}}}

ArkUI 的组件结构更轻量。

UI 布局思想的差异

传统 UI 布局通常依赖:

  • ConstraintLayout
  • AutoLayout
  • Flexbox

例如 iOS:

View ├── Top constraint ├── Leading constraint └── Width constraint 

而 ArkUI 主要依赖:

  • Column
  • Row
  • Flex
  • Stack

例如:

Column(){Text("标题")Row(){Button("确认")Button("取消")}}

布局逻辑更接近:

线性布局 + 组合布局

而不是复杂约束系统。

跨设备 UI 是最大不同

传统 App 的 UI 只需要考虑:

  • 手机屏幕

但鸿蒙需要考虑:

  • 手机
  • 平板
  • PC
  • 车机
  • IoT

这意味着 UI 架构必须具备:

跨设备适配能力

ArkUI 响应式布局示例

@Entry@Component struct AdaptivePage {build(){Column(){if(DeviceInfo.deviceType ==='phone'){PhoneLayout()}else{TabletLayout()}}}}

同一套代码适配不同设备。

分布式 UI 是鸿蒙最大的不同

鸿蒙不仅支持跨设备 UI,还支持 分布式 UI

例如:

  • 手机点击按钮
  • 平板展示内容

示例:

import distributedData from'@ohos.data.distributedData'asyncfunctionsyncData(){await kvStore.put("article_id","1001")}

另一设备读取:

let id =await kvStore.get("article_id")openArticle(id)

UI 不再局限在单设备。

对开发者意味着什么

如果你是传统 App 开发者,迁移到 ArkUI 需要改变三件事。

第一 页面思维 → 组件思维

过去:

页面 → 控制 UI 

现在:

组件 → 组成 UI 

页面只是组件入口。

第二 生命周期思维 → 状态思维

过去:

  • viewDidLoad
  • onResume
  • onPause

现在更重要的是:

状态变化

第三 单设备 UI → 分布式 UI

过去只需要考虑:

  • 一块屏幕

现在需要考虑:

  • 多设备
  • 多窗口
  • 跨设备协同

总结

传统 App 的 UI 架构核心是:

页面驱动 

而鸿蒙 ArkUI 的 UI 架构核心是:

组件驱动 

两者的差异可以总结为:

传统 App鸿蒙 ArkUI
页面中心组件中心
生命周期驱动状态驱动
单设备 UI分布式 UI
页面导航组件组合

理解这一点之后,你就会发现:

ArkUI 不是简单换了一套 UI 写法。

它背后的目标,是支持:

  • 多设备
  • 分布式
  • AI 原生应用

这也是为什么越来越多开发者在学习鸿蒙时,会感觉:

这不仅是一套新的 UI 框架,更是一种新的应用架构。

Read more

X86、ARM与C86架构全面对比分析:性能、功耗、成本与生态系统

目录标题 * X86、ARM与C86架构全面对比分析:性能、功耗、成本与生态系统 * 一、架构概述与发展背景 * 1.1 X86架构:PC与服务器市场的传统霸主 * 1.2 ARM架构:移动领域的王者与新兴服务器力量 * 1.3 C86架构:国产x86兼容的创新尝试 * 二、性能表现对比分析 * 2.1 运算速度与数据处理能力 * 2.2 不同场景下的性能表现 * 2.3 性能优化与未来趋势 * 三、功耗与能效比分析 * 3.1 不同架构的功耗特性 * 3.2 不同应用场景下的能耗分析 * 3.3 能效优化技术与未来趋势 * 四、成本分析与经济性比较 * 4.1 芯片制造成本对比 * 4.2 不同应用场景的总体拥有成本(

By Ne0inhk
KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南) 本文围绕 KingbaseES 中 ksql 命令行操作表展开,涵盖表 “创建→查看→数据增删改查→结构修改→删除” 全生命周期。前置准备需连接数据库并切换目标模式,可选确认表空间;创建表要明确数据类型与约束,含基础单表、进阶复合主键表示例;查看表结构可通过 \dt、\d、\d + 命令分别获取表列表、基本结构、详细信息;数据操作聚焦 INSERT(单条 / 批量)、SELECT(全量 / 条件 / 排序)、UPDATE(必加 WHERE)、DELETE(必加 WHERE);结构修改含增列、改列、删列、加约束、改表名;还梳理了三类常见报错解决方案。全文搭配实操命令与验证方法,助力新手快速掌握表操作核心技巧。

By Ne0inhk
深挖MySQL兼容核心,看懂金仓数据库迁移工程硬实力

深挖MySQL兼容核心,看懂金仓数据库迁移工程硬实力

深挖MySQL兼容核心,看懂金仓数据库迁移工程硬实力 * 一、MySQL迁移必踩的三大隐形坑,新手一定要提前避开 * 1. JSON数据类型差异:语法看着兼容,实际逻辑完全不同 * 2. 高并发事务隔离级别:适配不好容易出现数据混乱 * 第一步:MySQL事务隔离级别实操代码 * 第二步:金仓事务实操代码 * 3. Group By严格模式:最容易忽略的隐性语法坑 * 第一步:MySQL Group By严格模式测试代码 * 第二步:金仓Group By实操代码 * 二、金仓数据库零改造迁移的核心优势 * 1. 内核级深度兼容,贴合MySQL操作逻辑 * 2. JSON专项优化,MySQL语法直接复用 * 3. 参数自适应,自动对齐MySQL核心参数 * 三、实操总结与核心要点回顾 做信创国产化替代这几年,MySQL迁移绝对是政企项目里最常见、也最容易踩坑的活儿。毕竟MySQL作为市面上普及率最高的开源关系型数据库,从中小微企业的业务系统到政务端的基础应用,几乎都离不开它。刚接触这块的人大多会觉得,M

By Ne0inhk

MySQL 深度性能优化配置实战指南

🔧 一、硬件与系统层优化:夯实性能基石 硬件选型策略 CPU :读密集型场景选择多核CPU(如32核);写密集型场景选择高主频CPU(如3.5GHz+)。 内存 :建议≥64GB, 缓冲池命中率≥99% 是性能关键指标。 存储 : 必用NVMe SSD ,IOPS≥5万,避免HDD的I/O瓶颈。RAID10配置兼顾性能与冗余。 操作系统级优化 内核参数调整 (/etc/sysctl.conf): 提升连接与文件处理能力 fs.file-max = 1000000 net.core.somaxconn = 65535 vm.swappiness = 1 # 减少Swap使用 文件系统 :XFS优于EXT4(处理大文件更高效),挂载选项加 noatime 减少元数据写入。 关闭NUMA :避免跨节点内存访问延迟,BIOS中关闭或启动参数加

By Ne0inhk