这题非常“架构级”,我们直接把三条渲染链路并排拆开,看清楚谁画 UI、谁只给画布、谁控制 GPU
我会按 从你写代码 → 到屏幕亮像素 的顺序讲。

Flutter 不使用 Android RenderThread,RenderThread帮系统把 DisplayList 交给 GPU
Flutter 必须经过 SurfaceFlinger,所有 App、System UI、视频最终都在SurfaceFlinger合成
Flutter 的 Surface 是操作系统提供的“原生窗口缓冲区”,Flutter 把自己画好的帧提交到这个 Surface;“系统合成”就是操作系统(Android 的 SurfaceFlinger / iOS 的 WindowServer)把这个 Surface 和其它系统窗口一起合成并显示

一句话总览(先给你一眼看懂版)

平台UI 谁决定渲染引擎是否自绘系统参与度
Android 原生系统Skia极高
HarmonyOS系统ROSEN / ArkUI Renderer极高
FlutterFlutterImpeller / Skia(自带)很低

👉 Flutter 是“应用级引擎”,Android / HarmonyOS 是“系统级 UI”


一、Android 原生渲染链路

完整链路(经典)

View / Jetpack Compose
   ↓
Android UI Toolkit
   ↓
Canvas / DisplayList
   ↓
Skia(系统)
   ↓
OpenGL ES / Vulkan
   ↓
RenderThread
   ↓
SurfaceFlinger
   ↓
屏幕

关键角色解释

1️⃣ View / Compose

2️⃣ Canvas / DisplayList

3️⃣ Skia(系统级)

4️⃣ SurfaceFlinger


Android 的本质

你不是在“画 UI”,你是在“请求系统帮你画 UI”


二、HarmonyOS 渲染链路(ArkUI)

HarmonyOS 和 Android 理念非常接近,但架构更新。


渲染链路(ArkUI)

ArkTS / ArkUI
   ↓
UI DSL(声明式)
   ↓
ArkUI Framework
   ↓
Render Pipeline
   ↓
ROSEN(图形渲染服务)
   ↓
OpenGL / Vulkan
   ↓
Window Manager
   ↓
屏幕

关键点说明

1️⃣ ArkUI

2️⃣ ROSEN(重点)

3️⃣ GPU


HarmonyOS 的本质

系统级 UI 框架 + 系统级渲染服务

和 Android 一样:


三、Flutter 渲染链路(Impeller / Skia)

这是完全不同的一派


Flutter 渲染链路

Flutter Widget
   ↓
Element / RenderObject
   ↓
Layer Tree
   ↓
Flutter Engine
   ↓
Impeller(或 Skia)
   ↓
Vulkan / Metal / OpenGL
   ↓
Surface
   ↓
系统合成
   ↓
屏幕

关键差异点(非常重要)

1️⃣ Flutter 自己画 UI

2️⃣ Android / HarmonyOS 只提供:

👉 系统只当“窗口管理器”


四、三者核心差异(对照表)

1️⃣ 谁控制 UI?

平台UI 控制权
Android系统
HarmonyOS系统
FlutterFlutter 自己

2️⃣ 渲染引擎位置

平台渲染引擎
Android系统 Skia
HarmonyOS系统 ROSEN
Flutter应用内(Impeller / Skia)

3️⃣ GPU 使用方式

平台GPU 调用
Android系统统一调度
HarmonyOS系统统一调度
Flutter应用直接提交命令

五、用一句话类比(非常好记)

Android / HarmonyOS

🏛️ 政府大楼
你提交申请,
系统决定怎么建、怎么刷漆。


Flutter

🎮 游戏引擎
你拿到 GPU,
自己画世界。


六、为什么 Flutter 能跨平台一致?

因为:

👉 像 Unity / Unreal


七、最终“面试级”总结

Android 与 HarmonyOS 都是系统级 UI + 系统级渲染服务(Skia / ROSEN),应用通过高层 API 请求绘制;Flutter 则自带渲染引擎(Impeller/Skia),直接驱动 GPU,自绘 UI,系统只提供 Surface 与合成能力。


如果你愿意,我可以下一步帮你画一张:

你挑一个,我继续。