本篇是Android系统的第三篇,在上一篇介绍system service框架的时候,我们拿activity做例子介绍了UI是如何从最初用户的app到最终合成到显示的frame buffer,但我们并没有从原理角度串联起对几个framework组件的介绍:ams、wms、dms和surface flinger。比如显示与图层的关系、图层与窗口的关系、窗口与activity的关系、以及activity如何组织相关的UI组件来实现跟用户的交互,以及在这些关系之间这几个framework组件各起什么作用。
本文就从上面的问题出发,基于「什么是view?应用程序是如何通过ViewGroup实现应用页面的布局和交互--->view与activity之间的关系?activity实现页面的生命周期管理并参与系统的资源竞争,view通过ViewRootImpl完成activity ui组件的整体布局 ---> ams基于activity这一颗粒度管理app生命周期管理、进程调度、资源分配和权限管控 ---> activity和Windows之间的关系?Windows参与整个系统的布局和可见性,而应用一个或多个activity则参与充实Windows的内容。---> wms基于windows来实现应用程序窗口创建、布局、绘制、层级管理、事件分发,并最终完成对整个系统窗口的布局管理,从而将不同的应用渲染至一个surface上。---> Android系统一般有哪些surface 图层?view内容是如何通过ViewRootImpl最终渲染到surface上的?一些特殊的view,如视频和3D渲染,如何通过SurfaceView/TextureView直接实现在相应的surface上绘制 --->系统的不同 surface如何在surface flinger管理下最终渲染到一个显示器上的?vsync信号是如何同步管理起整个显示框架」这一纲领,串联起view--activity--windows--surface--display的整体联系,最终完成“应用UI设计→系统服务调度→硬件显示输出”。

一、什么是View?应用如何通过ViewGroup实现页面布局与交互
1. View的本质:UI的最小渲染与交互单元
View是Android中所有可视化元素的基类,是屏幕上能被用户看到并交互的“最小原子”,核心职责分为两部分:
- • 渲染职责:通过
measure()(测量自身尺寸)、layout()(确定在父容器中的位置)、draw()(将像素绘制到缓冲区)三个核心流程,完成自身视觉呈现(如TextView绘制文字、ImageView绘制图片); - • 交互职责:通过
dispatchTouchEvent()(事件分发)、onTouchEvent()(事件处理)接收并响应用户的触摸、点击、滑动等输入事件,是用户与APP交互的“直接触点”。
2. ViewGroup:View的“布局管理者”
ViewGroup是View的子类,作为“容器型View”,核心作用是管理子View的排列规则和层级,实现复杂页面的布局:
- • 布局规则封装:不同ViewGroup对应不同布局逻辑(如LinearLayout线性排列、RelativeLayout相对定位、ConstraintLayout约束布局),本质是通过重写
onMeasure()/onLayout(),递归完成所有子View的尺寸测量和位置确定; - • View树构建:一个Android页面的UI本质是一棵“View树”——根节点是DecorView(ViewGroup),下层包含标题栏、内容区(ContentView)等子ViewGroup,最终叶子节点是Button、TextView等普通View;
- • 事件分发中转:用户触摸事件会先传递到ViewGroup,再由ViewGroup根据子View的位置、可见性等规则,分发到目标子View,实现精准的交互响应。
核心总结
- • View是“UI原子”,负责自身渲染和交互;ViewGroup是“布局容器”,负责组织View树、制定布局规则;
- • 应用通过嵌套ViewGroup和View,构建出任意复杂度的页面布局,通过View的事件回调实现用户交互。
二、View与Activity的关系:Activity管生命周期,ViewRootImpl管UI布局
1. Activity的核心定位:View的“生命周期总管”+“资源竞争参与者”
Activity是Android四大组件之一,并非直接参与UI绘制,而是承担两大核心角色:
- • View的生命周期绑定者:Activity通过
setContentView()加载布局文件(或动态创建View),将View树与自身生命周期绑定——Activity的onResume()触发View的首次绘制,onPause()暂停View的交互和绘制,onDestroy()递归销毁整个View树; - • 系统资源竞争参与者:Activity作为AMS管理的“最小资源单元”,会代表应用向系统申请CPU、内存等资源,AMS通过Activity的状态(前台/后台)决定应用进程的优先级,进而仲裁资源分配(如前台Activity的进程优先获取CPU资源)。
2. ViewRootImpl:连接View与系统服务的“桥梁”
View自身无法直接与系统服务通信,必须通过ViewRootImpl完成UI布局的最终落地:
- • ViewRootImpl的创建时机:Activity的
onResume()执行后,系统会为Activity的View树创建ViewRootImpl,它是View树的“隐形根节点”(不在View树结构中,但持有DecorView的引用);
① 触发View树的measure()→layout()→draw()全流程,是UI绘制的“总开关”;
② 作为View与WMS的通信中介(通过Binder),向WMS上报View的尺寸、位置,接收WMS的布局指令;
③ 处理系统输入事件(如触摸、按键),将事件分发到View树的目标View。
核心总结
- • Activity是View的“老板”:决定View的生死、为View争取系统资源;
- • ViewRootImpl是View的“执行者”:承接Activity的指令,触发View布局绘制,对接系统服务;
- • View是“干活的”:完成具体的渲染和交互,不关心生命周期和系统通信。
三、AMS:基于Activity管控App生命周期、进程调度与资源分配
AMS(ActivityManagerService)是System Server中最核心的服务,以Activity为基本颗粒度,实现对应用的全生命周期管控:
1. 核心职责
- • Activity生命周期管控:通过
ActivityStack/ATMS(Android 10+拆分)管理Activity任务栈,触发Activity的onCreate()/onResume()等生命周期回调,处理页面跳转、回退、多任务切换; - • 进程调度:根据Activity的启动需求,通过Zygote孵化应用进程;维护进程优先级(前台进程>可见进程>后台进程),触发低内存回收(LMK)杀死低优先级进程;
- • 资源分配与权限管控:仲裁不同应用的资源竞争(如CPU/内存分配),校验Activity启动的权限(如后台启动Activity的限制),是应用与系统资源之间的“仲裁者”。
2. AMS与View/Activity的关联
AMS不直接接触View,仅通过管控Activity间接影响View:
- • AMS通知Activity启动→Activity创建View树→ViewRootImpl触发View绘制;
- • AMS将Activity标记为“后台状态”→系统降低应用进程优先级→View的绘制帧率降低(节省资源);
- • AMS销毁Activity→Activity递归销毁View树→View释放资源。
核心总结
- • AMS是“应用大管家”:只认Activity,不管View,通过管控Activity实现对应用的整体调度;
- • AMS的决策(如进程优先级、Activity状态)会间接决定View的渲染资源和生命周期。
四、Activity与Window的关系:Window是UI载体,Activity填充内容
1. Window的本质:系统级的“UI展示容器”
Window是Android中承载所有可视化内容的抽象载体,是WMS管理的最小单元,核心特征:
- • 每个Activity默认对应一个
PhoneWindow(Window的子类),Activity的View树最终挂载在PhoneWindow的DecorView上; - • Window是“无实体的画布”:本身不可见,但定义了UI的显示区域、交互规则,是连接Activity与WMS的核心媒介;
- • 一个应用可拥有多个Window:除了Activity的主Window,Dialog、Toast、悬浮窗等都会创建独立的Window。
2. Activity与Window的绑定逻辑

- • DecorView是Window的“根View”:封装了标题栏、导航栏、内容区等系统级UI结构,Activity的View树仅占DecorView的“内容区”;
- • Activity的核心作用是“填充Window内容”:Window由系统创建,Activity负责将View树挂载到Window上,让Window有“可显示的内容”。
核心总结
- • Window是“系统级UI容器”,是WMS的管理对象;Activity是“内容填充者”,负责为Window提供View树;
- • 关系类比:Window是“空房间”,Activity是“装修师傅”,View是“家具”——师傅把家具放进房间,房间的大小、位置由系统(WMS)决定。
五、WMS:基于Window实现系统窗口的全生命周期管理
WMS(WindowManagerService)是System Server中负责窗口管理的核心服务,以Window为基本颗粒度,实现对所有系统窗口的统一管控:
1. 核心职责
- • Window生命周期管理:为每个Window创建
WindowState对象,管理Window的创建、显示、隐藏、销毁,响应AMS的Window创建/销毁指令; - • 窗口层级管理:定义严格的窗口层级规则(从下到上):
壁纸层 → 应用窗口层(Activity) → 子窗口层(Dialog) → 系统窗口层(状态栏/导航栏) → 悬浮窗层
- • 布局计算:结合DMS提供的显示设备参数(屏幕分辨率、可用区域),计算每个Window的位置、大小,处理分屏、多窗口、悬浮窗的布局适配;
- • 事件分发:接收InputManagerService(IMS)的触摸/按键事件,根据Window的位置、焦点状态,将事件精准分发给目标Window的ViewRootImpl;
- • Surface申请:为每个Window向SurfaceFlinger申请Surface(绘图缓冲区),维护Window与Surface的绑定关系。
2. WMS与其他组件的关联
- • 与AMS:接收AMS的Window创建指令,向AMS反馈Window的焦点/可见状态(如Window隐藏→AMS触发Activity.onPause);
- • 与DMS:获取显示设备的配置(分辨率、刷新率),适配多屏显示的Window布局;
- • 与SurfaceFlinger:传递Window的层级、位置信息,让SurfaceFlinger完成最终的图层合成。
核心总结
- • WMS是“窗口总管理员”:管所有Window的位置、层级、交互,是Window与SurfaceFlinger之间的“中介”;
- • WMS不关心Window内的View内容,只关心Window的整体属性(位置、大小、层级)。
六、Android的Surface图层体系:View如何渲染到Surface,特殊View的处理
1. Surface的本质:“绘图缓冲区”(生产者-消费者模型)
Surface是Android中用于绘制图像的内存缓冲区,核心特征:
- • 采用“生产者-消费者”模型:应用(View)是“生产者”,向Surface写入绘制数据;SurfaceFlinger是“消费者”,从Surface读取数据进行合成;
- • 每个Surface对应一块
GraphicBuffer(基于Gralloc分配的显存),避免CPU与GPU之间的频繁数据拷贝,保证渲染性能。
2. 系统常见的Surface图层(按层级从下到上)
3. 普通View渲染到Surface的流程

- • 关键细节:View的绘制数据不会直接到屏幕,而是先写入Surface的显存缓冲区,SurfaceFlinger按需读取;
- • ViewRootImpl是View与Surface的“写入中介”,负责将View树的绘制结果批量写入Surface。
4. 特殊View(SurfaceView/TextureView)的独立Surface处理
对于视频播放、3D渲染等高性能场景,普通View的共享Surface会成为性能瓶颈,因此Android设计了专用View:
- • SurfaceView:申请独立的Surface(脱离Activity主Window的Surface),由WMS单独管理,视频数据直接写入该Surface,与GUI层Surface并行;
- • TextureView:基于
SurfaceTexture封装,将视频数据转为OpenGL纹理,融入普通View树(无独立Surface),支持对视频的裁剪、旋转等操作; - • 核心差异:SurfaceView有独立Layer,性能更高;TextureView无独立Layer,灵活性更强。
核心总结
- • Surface是“绘图显存缓冲区”,是View绘制数据与SurfaceFlinger之间的“数据载体”;
- • 普通View共享Activity主Window的Surface,特殊View拥有独立Surface,满足高性能渲染需求。
七、SurfaceFlinger管理Surface合成到Display,VSync同步整个显示框架
1. DMS:Display的“硬件管家”
DMS(DisplayManagerService)是显示设备的基础管理服务,核心作用:
- • 管理物理/虚拟显示设备(主屏、外接显示器、投屏),维护显示参数(分辨率、刷新率、色域);
- • 向WMS/SurfaceFlinger提供显示设备的硬件信息,是“显示硬件与系统服务的中介”。
2. SurfaceFlinger:图层合成的“最终执行者”
SurfaceFlinger是运行在独立进程的核心服务,负责将所有Surface合成为最终的屏幕图像:
核心流程

- • 合成方式:优先使用HWC(硬件合成),由显示芯片直接合成图层,性能高、功耗低;复杂场景用GPU合成。
3. VSync信号:整个显示框架的“同步时钟”
VSync(垂直同步)信号由Display硬件生成(如60Hz屏幕每16.6ms一次),核心作用:
- • 同步View绘制:Choreographer接收VSync信号后,触发ViewRootImpl的
performTraversals()(measure/layout/draw),保证View绘制节奏与屏幕刷新率一致; - • 同步SurfaceFlinger合成:SurfaceFlinger在VSync信号到来时,统一合成所有Layer,避免“屏幕撕裂”;
- • 核心价值:消除绘制与合成的异步性,保证画面流畅。
核心总结
- • DMS管“显示硬件参数”,SurfaceFlinger管“图层合成”;
- • VSync是“全局同步时钟”,让View绘制、SurfaceFlinger合成、屏幕显示保持节奏一致;
- • FrameBuffer是“最终帧缓冲区”,合成后的图像写入此处,由Display硬件直接读取显示。
八、完整链路总结(View→Display)
用户操作→View接收交互事件→Activity处理业务逻辑→AMS管控Activity生命周期→Activity填充Window内容→WMS管理Window布局/层级→WMS为Window申请Surface→View绘制数据写入Surface→SurfaceFlinger合成所有Surface的Layer→SurfaceFlinger将合成图像写入FrameBuffer→Display硬件显示图像
各核心组件的关键角色
- 1. AMS:管控Activity生命周期、进程调度,是“应用资源的仲裁者”;
- 2. WMS:管控Window布局、层级、事件分发,是“窗口的管理者”;
- 3. DMS:管控显示设备参数,是“显示硬件的中介”;
- 4. SurfaceFlinger:管控图层合成、VSync同步,是“图像合成的最终执行者”;
- 5. Activity:View的生命周期总管,Window的内容填充者;
- 6. View:UI渲染与交互的最小单元,Surface的数据生产者;
- 7. Window:WMS的管理单元,Surface的载体;
- 8. Surface:View绘制数据的显存缓冲区,Layer的数据来源。
核心关键点回顾
- 1. 整个显示体系的核心逻辑是“分层解耦”:View管绘制、Activity管生命周期、Window管系统交互、Surface管数据载体、SurfaceFlinger管合成、Display管硬件输出;
- 2. AMS/WMS/DMS/SurfaceFlinger各司其职:AMS管应用、WMS管窗口、DMS管显示硬件、SurfaceFlinger管图像合成;
- 3. VSync信号是全局同步核心,保证绘制、合成、显示的节奏一致,是画面流畅的关键。