Android 显示系统概述

102 阅读1分钟

以通俗易懂的方式为您解析Android显示系统的架构和工作原理。为了让不同技术背景的朋友都能理解,我会用生活中的类比来解释复杂概念,并穿插关键源码模块的作用。

一、Android显示系统就像"电影院"

想象你正在电影院看电影,整个显示系统就像一个精密协作的放映团队:

  1. 电影胶片(应用层)
    每个App都是一卷独特的胶片(如微信是剧情片,游戏是动作片),它们各自绘制自己的画面内容。

  2. 放映室(SurfaceFlinger服务)
    这是整个影院的核心控制室,负责:

    • 接收所有胶片(Surface)
    • 调整播放顺序(Z-order)
    • 控制放映时机(VSYNC)
    • 最终合成完整画面(Compose)
  3. 投影仪(HWC硬件合成器)
    高端影院可能有数字投影仪(对应GPU硬件加速),普通影院用传统胶片投影仪(CPU软件合成)。

  4. 银幕(Display设备)
    最终呈现画面的载体,可能是主屏幕、外接显示器或VR设备。

二、核心组件解剖(附源码模块)

1. SurfaceFlinger(影院经理)

职责:图层合成总指挥
源码位置:frameworks/native/services/surfaceflinger/

  • Layer管理:维护所有窗口的图层关系(通过Layer.cpp
  • Dirty区域:智能计算需要刷新的区域(DirtyRegion.h
  • HWComposer:调用硬件加速接口(HWComposer.cpp

工作流程

mermaid
	graph TD

	A[应用提交Buffer] --> B(SurfaceFlinger)

	B --> C{是否需要合成?}

	C -->|是| D[分配合成任务]

	C -->|否| E[直接输出Buffer]

	D --> F[调用HWC/GL合成]

	F --> G[输出到Display]