Administrator
发布于 2026-09-03 / 17,379 阅读
0
0

鸿蒙百篇系列第 91 篇:鸿蒙系统架构总览——从内核到应用的完整技术地图

写代码时最怕的不是语法报错,而是对底层一无所知。很多开发者在 ArkUI 里调了一天状态管理,最后发现卡顿来自渲染管线;折腾了很久的权限申请,发现 HarmonyOS NEXT 的权限模型早就换了底层逻辑。到了专家阶段,你需要一张完整的地图,知道每一行代码落在系统的哪个位置。

这篇把 HarmonyOS NEXT 从内核到应用层拆成四层,告诉你各层职责、关键子系统、以及开发者日常写代码时该对齐哪一层。

一、四层架构:一张总图看懂系统

HarmonyOS NEXT 的整体架构可以归纳为四层:

层级

核心职责

开发者最关心的内容

应用层(Application)

应用与元服务运行

ArkTS 应用、元服务、卡片

框架层(Framework)

开发框架与运行时

ArkUI、Ability、ArkTS Runtime

系统服务层(System Service)

系统能力与中间件

分布式软总线、数据管理、安全、AI、多媒体

内核层(Kernel)

硬件抽象与资源管理

鸿蒙内核、驱动框架、内存/进程/调度

一个网络请求的实际路径能说明问题。你的业务代码调用 @ohos.net.http,请求会先到框架层的 ArkTS 运行时做类型检查与封装,再进入系统服务层的网络服务,最终通过内核层的 socket 接口到达网卡驱动。中间任意一环的日志、权限、性能行为都会影响你的调用结果。

二、内核层:安全与流畅的底座

HarmonyOS NEXT 采用自研鸿蒙内核,替代了此前兼容 Android 的 Linux 内核路径。它的设计目标很明确:小内核、强隔离、低时延。

微内核思路下,只有进程调度、IPC、内存管理等最核心机制运行在内核态。驱动、文件系统、网络协议栈被移到用户态。这意味着某个驱动崩溃不会拖垮整个系统,某个应用的非法内存访问也更容易被隔离。

对开发者来说,内核层的差异主要体现在三个地方:

  1. 进程隔离更严格:应用沙箱边界由内核保证,沙箱外路径不可直接访问。

  2. IPC 是基础能力:跨进程通信不仅是应用间,也是系统服务与应用之间的默认方式。

  3. 权限模型下沉:权限校验不再只是框架层检查,而是与内核 Access Token 机制联动。

硬件驱动框架(HDF)是内核层另一个关键设计。它把驱动拆成驱动接口层、驱动核心层和驱动适配层。对应用开发者影响较小,但如果你做 NDK 开发或 IoT 设备适配,需要理解 HDF 的设备抽象模型。

三、系统服务层:分布式能力的来源

系统服务层是 HarmonyOS NEXT 区别于传统移动 OS 的核心。它把「多设备协同」做成系统级能力,而不是让应用自己想办法连接。

重点子系统:

子系统

能力

典型 API 或 Kit

分布式软总线

设备发现、组网、传输

Distributed Service Kit

分布式数据管理

跨设备 KV/RDB 同步

ArkData、Distributed Data Object

分布式任务调度

跨设备迁移、接续

Ability 的迁移接口

安全服务

权限、加密、可信执行

Crypto Architecture Kit、Asset Store Kit

AI 服务

端侧推理、意图框架

Intents Kit、MindSpore Lite

多媒体服务

音视频、相机、图形

Audio Kit、Camera Kit、XComponent

分布式软总线最值得单独说。它屏蔽了 Wi-Fi、蓝牙、星闪等底层传输差异,给上层提供统一的设备发现与会话接口。应用不需要关心两台设备是通过什么协议连上的,只需要知道「同一账号、同一局域网、已信任」这三个条件满足后,就可以调用跨设备能力。

// 设备发现示例:获取可信设备列表
import { distributedDeviceManager } from '@kit.DistributedServiceKit';

let deviceManager: distributedDeviceManager.DeviceManager | null = null;

try {
  deviceManager = distributedDeviceManager.createDeviceManager('com.example.demo');
  const devices = deviceManager.getTrustedDeviceListSync();
  devices.forEach(device => {
    console.info(`device: ${device.deviceName}, networkId: ${device.networkId}`);
  });
} catch (err) {
  console.error(`device manager error: ${JSON.stringify(err)}`);
}

代码很短,但它背后的链路已经经过软总线的设备认证、能力协商和传输层选择。开发者只需要拿到 networkId,后续的数据共享、任务迁移都依赖这个标识。

四、框架层:你每天写的代码跑在这里

框架层是开发者接触最多的部分。它包括:

  • ArkTS Runtime:类型检查、垃圾回收、AOT/JIT 编译执行。

  • ArkUI:声明式 UI 框架,负责组件树构建、状态管理、布局渲染。

  • Ability 框架:应用生命周期、页面路由、Service/Extension 能力。

  • OpenHarmony API:系统能力对外暴露的统一接口。

ArkUI 的渲染管线值得对齐。你写的 @State 变化不会直接变成屏幕像素,而是经过「状态变更 → 组件 diff → 布局测算 → 绘制指令 → GPU 渲染」多个阶段。理解这个管线,才能真正理解为什么状态要尽量精确、布局要尽量扁平、长列表要用 LazyForEach。

// 状态作用域最小化示例
@Entry
@Component
struct PageA {
  @State globalTitle: string = '首页';

  build() {
    Column() {
      Header({ title: this.globalTitle }) // 只有 Header 依赖标题
      HotList()                          // 列表内部状态不依赖 globalTitle
    }
  }
}

@Component
struct HotList {
  @State items: Item[] = [];            // 局部状态,作用域仅限本组件

  build() {
    List() {
      LazyForEach(this.dataSource, (item: Item) => {
        ListItem() {
          ItemCard({ data: item })
        }
      }, (item: Item) => item.id)
    }
  }
}

把 HotList 的状态从页面级拆到组件级,是为了避免列表刷新时带动整页重绘。这个优化思路的底层依据,就是 ArkUI 的组件树 diff 机制。

五、应用层:形态正在变轻

HarmonyOS NEXT 的应用层不只是传统 App,还包括:

  • 元服务(Atomic Service):免安装、可流转、以卡片为载体。

  • 服务卡片(Form):桌面/负一屏的轻量信息入口。

  • 原生应用(Application):完整功能的安装包。

三种形态不是互斥的,而是一个应用可以拆成「应用主体 + 元服务入口 + 多个卡片」的组合。比如一个出行应用,主 App 做完整订票流程,元服务提供行程提醒,卡片展示登机口动态。

形态

包大小

入口

适合承载

原生应用

大

桌面图标

完整业务逻辑

元服务

小

搜索/场景触发

高频轻量功能

卡片

极小

桌面/负一屏

信息展示与快捷操作

六、实战建议:开发时怎么对齐架构

  1. 调性能先看框架层,再看系统服务层:ArkUI 状态管理、组件复用、LazyForEach 是第一步;如果还卡,再看系统服务层的资源调度或内核层的 CPU 调度策略。

  2. 跨设备功能优先用系统能力:不要自己实现设备发现和网络传输,直接用 Distributed Service Kit。

  3. 安全设计从权限模型出发:HarmonyOS NEXT 的权限粒度更细,安全访问机制要求「用户选哪张图,应用就拿哪张图」,这会影响图片选择、文件读取等交互流程。

  4. 元服务不等于阉割版 App:它是新的流量入口,设计时要考虑「一触即达、用完即走」的场景。

小结

鸿蒙系统架构不是背分层名词就能掌握的。真正有用的是:当你遇到一个问题时,能快速判断它发生在哪一层,该用哪一层的能力解决。性能问题多落在框架层和内核层,跨设备问题多落在系统服务层,产品形态问题则要看应用层。

下篇我们把性能这个高频话题体系化梳理一遍,从指标定义到治理闭环。

参考阅读

  • HarmonyOS 开发者文档:系统架构概述

  • HarmonyOS 开发者文档:分布式软总线

  • HarmonyOS 开发者文档:ArkUI 渲染管线


评论