这题非常“架构级”,我们直接把三条渲染链路并排拆开,看清楚谁画 UI、谁只给画布、谁控制 GPU。我会按 从你写代码 → 到屏幕亮像素 的顺序讲。
Flutter 不使用 Android RenderThread,RenderThread帮系统把 DisplayList 交给 GPUFlutter 必须经过 SurfaceFlinger,所有 App、System UI、视频最终都在SurfaceFlinger合成Flutter 的 Surface 是操作系统提供的“原生窗口缓冲区”,Flutter 把自己画好的帧提交到这个 Surface;“系统合成”就是操作系统(Android 的 SurfaceFlinger / iOS 的 WindowServer)把这个 Surface 和其它系统窗口一起合成并显示
👉 Flutter 是“应用级引擎”,Android / HarmonyOS 是“系统级 UI”
View / Jetpack Compose ↓ Android UI Toolkit ↓ Canvas / DisplayList ↓ Skia(系统) ↓ OpenGL ES / Vulkan ↓ RenderThread ↓ SurfaceFlinger ↓ 屏幕
Android 的 2D 图形核心
负责:
文本
路径
图片
你不能直接控制它
你不是在“画 UI”,你是在“请求系统帮你画 UI”
HarmonyOS 和 Android 理念非常接近,但架构更新。
ArkTS / ArkUI ↓ UI DSL(声明式) ↓ ArkUI Framework ↓ Render Pipeline ↓ ROSEN(图形渲染服务) ↓ OpenGL / Vulkan ↓ Window Manager ↓ 屏幕
类似:
Jetpack Compose
SwiftUI
声明式 + 响应式
HarmonyOS 的:
UI 合成器
渲染服务
角色 ≈ Skia + SurfaceFlinger + WindowManager 的组合
同样是:
OpenGL
Vulkan
系统级 UI 框架 + 系统级渲染服务
和 Android 一样:
这是完全不同的一派。
Flutter Widget ↓ Element / RenderObject ↓ Layer Tree ↓ Flutter Engine ↓ Impeller(或 Skia) ↓ Vulkan / Metal / OpenGL ↓ Surface ↓ 系统合成 ↓ 屏幕
👉 系统只当“窗口管理器”
🏛️ 政府大楼你提交申请,系统决定怎么建、怎么刷漆。
🎮 游戏引擎你拿到 GPU,自己画世界。
因为:
👉 像 Unity / Unreal
Android 与 HarmonyOS 都是系统级 UI + 系统级渲染服务(Skia / ROSEN),应用通过高层 API 请求绘制;Flutter 则自带渲染引擎(Impeller/Skia),直接驱动 GPU,自绘 UI,系统只提供 Surface 与合成能力。
如果你愿意,我可以下一步帮你画一张:
你挑一个,我继续。
Github开源生信云平台 DEMO