Skip to main content
鸿蒙说到底是分布式软总线加上 ArkTS/ArkUI 这套应用框架。ArkTS 的类型限制我适应了一阵,习惯后就好理解了。

Q1: 鸿蒙的历史?为什么要有它?

1

2012-2018 年: 华为的技术积累

华为从 2012 年开始研发自有操作系统,内部代号”鸿蒙”。最初的目标是为 IoT 设备(智能家居、穿戴设备)打造一个轻量级、分布式的操作系统。2018 年美国制裁事件加速了鸿蒙的落地进程——华为需要一个不依赖 Google GMS(Google Mobile Services)的替代方案。
2

2019 年: 鸿蒙 1.0 发布

2019 年华为开发者大会上,鸿蒙 1.0 正式发布。首搭荣耀智慧屏。核心理念是分布式架构——多个设备可以组成一个”超级终端”,共享硬件能力(如手机的摄像头、手表的传感器、平板的屏幕)。不过鸿蒙 1.0 主要面向智慧屏等 IoT 设备,还没有覆盖手机;手机端的规模化落地要等到 2.0。
3

2020-2022 年: 鸿蒙 2.0/3.0 手机端落地

鸿蒙 2.0 开始在手机上大规模推送。华为引入了 HarmonyOS Connect(鸿蒙智联)生态,第三方 IoT 设备可以接入鸿蒙分布式能力。应用开发框架从 Java/JS 逐步转向 ArkTS。但底层仍然兼容 Android APK,引发”鸿蒙是否是 Android 套壳”的争议。
4

2023-2024 年: 鸿蒙 NEXT(纯血鸿蒙)

鸿蒙 NEXT(HarmonyOS NEXT)是鸿蒙的里程碑版本——彻底去除 AOSP 代码,不再兼容 Android APK。应用必须使用 ArkTS + ArkUI 开发,运行在自研的方舟运行时上。这意味着鸿蒙从”兼容 Android”转变为”独立生态”。2024 年第四季度,鸿蒙 NEXT 正式商用。
5

2025 年: 鸿蒙生态加速

鸿蒙 NEXT 商用后,国内主流 App(微信、支付宝、抖音、美团等)陆续推出鸿蒙原生版本。鸿蒙开发者数量快速增长,ArkTS/ArkUI 成为前端开发者需要关注的新技术栈。
鸿蒙解决的核心问题:
鸿蒙的核心创新是分布式架构——通过分布式软总线将多个设备组成”超级终端”,共享硬件能力和数据,同时用 ArkTS + ArkUI 提供统一的应用开发体验。

没有鸿蒙的时代

手机、平板、手表、车机、智能家居各自为战。手机上看到一半的视频,想在平板上继续看,需要手动投屏或重新打开。就像一个公司有 5 个部门,每个部门都有自己的邮箱系统、文件服务器和通讯录,互相不通气。

有了鸿蒙之后

鸿蒙的分布式能力让多个设备组成”超级终端”。手机上正在看的视频,靠近平板自动续播;手表检测到你在跑步,自动让手机切换到运动播放列表。就像所有部门用同一套系统,文件共享、通讯录统一、消息互通。
回答鸿蒙历史时,重点说清三个关键节点:2019 年发布(分布式架构理念)、鸿蒙 NEXT(去除 AOSP,独立生态)、以及 ArkTS/ArkUI(前端开发者的新机会)。想听的是你对”国产替代”和”全场景分布式”这两个核心价值的理解。

Q2: 鸿蒙核心架构(ArkTS、ArkUI、方舟编译器)

鸿蒙的应用开发架构由三个核心组件组成:ArkTS(开发语言)、ArkUI(声明式 UI 框架)、方舟编译器(运行时和编译工具链)。

ArkTS:鸿蒙的应用开发语言

ArkTS 是基于 TypeScript 的扩展语言,专门为鸿蒙应用开发设计。它在 TypeScript 的基础上增加了声明式 UI 描述能力和状态管理装饰器。
ArkTS vs TypeScript 的关键区别:

ArkUI:声明式 UI 框架

ArkUI 是鸿蒙的声明式 UI 开发框架,设计理念类似 Flutter 的 Widget 系统和 SwiftUI。

方舟编译器与运行时

方舟编译链路的关键点:
  • 先编译成字节码:ArkTS 源码先被编译为方舟字节码(ABC),由方舟运行时加载执行,并不是直接产出机器码
  • AOT 与 JIT 混合:可以在安装或设备空闲时把启动路径、热点代码提前 AOT 编译为机器码,运行期也能按需编译
  • 静态类型带来的优化空间:ArkTS 去掉了动态特性,编译器能在编译期确定类型,生成更高效的代码
  • 并发 GC:垃圾回收不阻塞主线程,减少卡顿
ArkTS 相比 TypeScript 做了严格化限制——移除了 TypeScript 中的动态特性(如 any 类型、eval、with 语句),目的是让编译器能在编译期确定类型、做更激进的静态优化。这意味着:
  • 不支持 any 类型(必须明确类型)
  • 不支持动态属性访问(如 obj[dynamicKey])
  • 不支持 eval() 和 with 语句
  • 不支持运行时修改对象结构(如给对象添加新属性)
这些限制让习惯了 JavaScript 灵活性的开发者感到不适应,但它们是静态编译优化的前提。
鸿蒙的架构就像一个城市的交通系统:ArkTS 是驾驶规则(告诉司机怎么开车),ArkUI 是道路和交通标志(定义车辆怎么行驶和停靠),方舟编译器是交通管理局(把驾驶规则翻译成每个路口的具体信号灯指令)。分布式软总线是高速公路网——连接城市中的所有区域(设备),让车辆(数据和服务)可以在不同区域之间自由流动。

Q3: 鸿蒙 vs Android vs iOS

基础梳理

专家视角深度剖析

很多人只知道”鸿蒙是华为做的操作系统”,但实际更在意的是:你是否理解鸿蒙在分布式能力和开发范式上的独特性,以及它与 Android/iOS 的本质差异? 鸿蒙的三个核心技术差异: 1. 分布式软总线
2. Stage 模型 vs FA 模型
3. 一次开发,多端部署

鸿蒙与前端开发的关系

对于前端开发者来说,鸿蒙是一个新的就业方向。ArkTS 基于 TypeScript,ArkUI 的声明式语法类似 React/Vue,前端开发者的学习成本相对较低。

Q4: 鸿蒙开发实战

页面开发:ArkUI 声明式语法

状态管理:装饰器体系

网络请求封装

分布式能力调用

鸿蒙开发的核心是 ArkTS + ArkUI 的声明式开发范式,加上分布式软总线的跨设备协同能力。前端开发者可以快速上手,但需要理解分布式架构和方舟编译器的特殊性。

常见追问

答题要点: ArkTS 基于 TypeScript 但做了严格化限制,目的是让代码在编译期就能确定类型、支持方舟的编译优化。高分回答: “ArkTS 是基于 TypeScript 的扩展语言,但做了关键的严格化限制:移除的动态特性:
  • 不支持 any 类型(所有类型必须明确)
  • 不支持 eval() 和 with 语句
  • 不支持运行时给对象添加新属性
  • 不支持动态属性访问(如 obj[dynamicKey])
新增的能力:
  • 声明式 UI 描述(build() 函数)
  • 状态管理装饰器(@State、@Prop、@Link)
  • 组件生命周期(aboutToAppear、aboutToDisappear)
为什么要单独做语言?TypeScript 编译为 JavaScript 后运行在 V8 等 JS 引擎中,这些引擎以 JIT 为主——首次执行从字节码解释开始,热点代码才编译成机器码,存在预热成本。方舟编译器则先把 ArkTS 编译为方舟字节码(ABC),再在安装或空闲时把启动路径、热点代码 AOT 编译为机器码。要做到这一点,类型信息必须在编译期完全确定;TypeScript 的 any、动态属性访问等特性会让静态分析失效,所以 ArkTS 移除了这些动态特性。
对前端开发者的建议:如果你习惯了 TypeScript 的灵活性,ArkTS 的限制会让你不适应。但这些限制是静态编译优化的前提——和 Dart/Flutter 在 AOT 上的取舍类似。”
答题要点: Stage 模型是鸿蒙当前主推的应用模型,取代了早期的 FA 模型;鸿蒙 NEXT 只支持 Stage 模型。高分回答: “FA 模型(Feature Ability)和 Stage 模型是鸿蒙的两代应用模型:FA 模型(API 8 及以前,已废弃):
  • 借鉴了 Android 的 Activity/Service 思路
  • 使用 PageAbility、ServiceAbility、DataAbility
  • 早期与兼容 Android 的生态绑定较深
Stage 模型(API 9 起主推):
  • 鸿蒙自研的应用模型
  • 使用 UIAbility + ExtensionAbility + AbilityStage
  • 鸿蒙 NEXT 唯一支持的模型
  • 更好的分布式能力和生命周期管理
Stage 模型的核心改进:
  1. WindowStage:UIAbility 和窗口分离,支持多窗口
  2. ExtensionAbility:可扩展的能力类型(如卡片、输入法、壁纸)
  3. Context:更清晰的上下文管理,支持分布式场景
  4. AbilityStage:模块级别的生命周期管理”
答题要点: 分布式软总线是鸿蒙实现多设备协同的核心基础设施。高分回答: “分布式软总线是鸿蒙的设备间通信基础设施,让多个设备像一个设备一样协同工作。工作流程:
  1. 设备发现:通过 Wi-Fi、蓝牙、NFC 等方式发现周围的鸿蒙设备
  2. 组网认证:设备之间通过华为账号进行身份认证和安全握手
  3. 建立连接:在设备之间建立加密的通信通道
  4. 能力调用:一个设备可以调用另一个设备的硬件能力
实际应用场景:
  • 跨设备剪贴板:手机复制文字,平板直接粘贴
  • 分布式文件:平板直接访问手机的文件系统
  • 接续能力:手机上编辑的文档,靠近平板自动接续
  • 多屏协同:手机屏幕投射到平板,用平板的键盘操作手机
对开发者的意义: 鸿蒙提供了统一的分布式 API,开发者不需要关心底层的通信协议(Wi-Fi/蓝牙/NFC)。通过 distributedDataObject(分布式数据对象)和 distributedSchedule(分布式调度),可以轻松实现跨设备的数据同步和任务迁移。”
答题要点: AOT 提前编译、JIT 运行时编译,方舟采用的是两者混合的策略。高分回答: “AOT(Ahead-of-Time)和 JIT(Just-in-Time)是两种不同的编译策略:V8 的 JIT 编译:
  • 优点:启动快(解释执行),可根据运行时信息优化(如类型推测)
  • 缺点:首次执行性能差,编译有延迟,需要存储编译缓存
方舟编译器的编译策略:
  • 优点:启动路径提前编译,首屏和常用功能没有 JIT 预热;内存占用更可控
  • 代价:AOT 需要额外的编译时间与产物体积,无法完全利用运行时类型信息
为什么强调 AOT? 手机 App 对启动速度和运行流畅度要求极高。纯 JIT 在首次执行时有明显的预热延迟(用户首次打开某个功能时卡顿)。方舟把启动路径和热点代码在安装或设备空闲时提前 AOT 编译,用户打开 App 就是满性能;冷门路径仍交给运行时按需处理,避免为用不到的代码付出编译成本。实际影响:
  • App 首次启动:启动路径已 AOT,省掉预热
  • App 安装时间:会变长(需要编译)
  • 运行时内存:AOT 为主,减少 JIT 编译缓存的占用”
答题要点: 两者都是声明式 UI 的状态管理机制,但底层实现和触发机制不同。高分回答: “鸿蒙的 @State 和 React 的 useState 都是声明式 UI 的状态管理装饰器,但有几个关键区别:相同点:
  • 都是组件级别的状态管理
  • 状态变化时触发 UI 重新渲染
  • 都是声明式 UI 范式的核心
不同点:
鸿蒙 @State 的深度观察:
React 的 useState 不支持这种深度观察——修改对象属性不会触发更新,需要创建新对象。”
答题要点: 鸿蒙提供了自适应布局和断点系统,支持一套代码适配多种设备。高分回答: “鸿蒙的跨设备 UI 适配核心是自适应布局 + 断点系统:1. 断点系统(Breakpoint System) 鸿蒙定义了 5 个断点,对应不同设备类型:
2. 自适应布局组件
3. 媒体查询
最佳实践:
  • 使用 GridRow + GridCol 做响应式网格
  • 使用 SideBarContainer 做大屏/小屏切换
  • 使用 Tabs 的自适应模式(小屏底部导航,大屏侧边导航)
  • 图片使用 Image 组件的 objectFit 属性自适应缩放”
答题要点: 鸿蒙生态正在快速增长,但仍面临应用数量、开发者工具和国际化的挑战。高分回答: “鸿蒙 NEXT 的生态现状可以用’快速增长但仍在早期’来概括:积极面:
  • 国内主流 App 已陆续推出鸿蒙原生版本(微信、支付宝、抖音、美团等)
  • 华为投入大量资源补贴开发者(鸿蒙开发者激励计划)
  • ArkTS/ArkUI 的学习曲线对前端开发者友好
  • 分布式能力是 iOS/Android 没有的差异化优势
挑战面:对前端开发者的机会: 鸿蒙 NEXT 去除 Android 兼容层后,需要大量原生应用。ArkTS 基于 TypeScript,前端开发者是最容易转型的群体。国内大厂(字节、阿里、腾讯、美团)都在组建鸿蒙团队,鸿蒙开发者的需求正在快速增长。面试中的回答策略: 不要回避鸿蒙的挑战(对方会觉得你不客观),但重点强调机会——分布式能力的差异化、前端开发者的转型优势、国产替代的大趋势。”
答题要点: 鸿蒙和 Flutter 是两个不同层面的技术,需要从多个维度对比。高分回答: “鸿蒙和 Flutter 经常被拿来比较,但它们本质上是不同层面的技术:定位差异:
  • Flutter:跨端 UI 框架(跑在 Android/iOS/Web/桌面之上)
  • 鸿蒙:操作系统 + 应用开发框架(从内核到应用层的全栈)
对比分析:各自的优势场景:选鸿蒙的信号: ├── 需要覆盖华为设备(手机/手表/车机/IoT) ├── 需要分布式多设备协同能力 ├── 面向国内市场 ├── 国产替代需求 └── 前端开发者转型移动开发选 Flutter 的信号: ├── 需要 iOS + Android 双端一致的 UI ├── 需要覆盖 Web 和桌面端 ├── 面向全球市场 ├── UI 高度定制化 └── 已有 Dart/Flutter 经验实际项目中的选择: 在国内大厂的实践中,很多团队采用’鸿蒙 + Flutter’的混合方案——鸿蒙原生开发用于需要分布式能力的核心场景,Flutter 用于需要像素级一致 UI 的跨端页面。两者不是竞争关系,而是互补关系。“

及格回答 vs 满分回答

问题:“鸿蒙和 Android 的本质区别是什么?”

及格回答(60-70分):
“鸿蒙是华为自己做的操作系统,不依赖 Google。开发语言是 ArkTS,UI 框架是 ArkUI。”
问题出在:知道表面区别,但不理解技术架构和设计取舍。 满分回答(90-100分):
鸿蒙和 Android 的本质区别在三个层面:内核架构、应用框架、分布式能力。
内核层面,Android 基于 Linux 宏内核,鸿蒙使用自研的微内核。微内核将系统服务(如文件系统、驱动)从内核空间移到用户空间,提高了安全性和可维护性——单个服务崩溃不会导致整个系统崩溃。鸿蒙的微内核还通过了形式化验证(数学证明),安全性高于 Linux 内核。
应用框架层面,Android 使用 Kotlin/Java + Jetpack Compose,鸿蒙使用 ArkTS + ArkUI。ArkTS 基于 TypeScript 但移除了 any、eval 等动态特性,源码先编译为方舟字节码(ABC),再由方舟运行时以 AOT/JIT 混合方式执行——启动路径和热点代码可以在安装或空闲时提前 AOT 编译[2]。这和 Flutter 的 Dart AOT 思路类似,区别在于方舟保留了字节码这一层,冷门代码路径仍可在运行期编译。
分布式能力是鸿蒙最大的差异化。通过分布式软总线,多个鸿蒙设备可以组成”超级终端”,共享硬件能力和数据[1]。这是 Android 和 iOS 都没有的原生能力——Android 的 Nearby Share 只能传文件,iOS 的 Continuity 只能在 Apple 设备间接力,而鸿蒙的分布式能力可以让手机直接调用平板的摄像头、让手表的传感器数据实时同步到车机。

📚 延伸阅读与引用参考