Android绘制系统简介

2020-07-21  本文已影响0人  None_Ling

绘制简介

Android中使用OpenGL以及 Skia Vulkan来进行跨平台的绘制. 通过客户端进程、SystemServer、SurfaceFlinger三个进程的配合来完成Android系统上的绘制工作.

流程简介

阶段1 - 系统初始化

完成显示相关的设备驱动的初始化 :

阶段2 - 建立连接

在窗口(如ActivityDialogPopupWindow、悬浮窗等)需要被显示到屏幕上时 :

阶段3 - 填充Surface

在进程收到Vsync信号之后 :

阶段4 - 开始绘制

Surface填充完后 , 开始绘制工作 :

阶段5 - 显示屏显示

在SurfaceFlinger端 :

关系图

image.png

核心类介绍

绘制相关的核心类主要包括三个进程中的类 .

应用进程

ActivityThread : 通过ApplicationThread接收AMS的消息 , 回调Activity生命周期
ViewRootImpl : 管理IWindowSession以及RootView
IWindowSession : 负责与WMS通信 , 并且通过AIDL填充Surface
PhoneWindow : 负责Activity的DecorView的inflate操作

SystemServer进程

WindowManagerService : 负责将Activity与Window进行绑定 , 管理所有窗口
WindowState : 每一个WindowState代表一个客户端窗口 , 并且保存与客户端窗口通信的IBinder
Session : 用于保持与客户端的IBinder连接
SurfaceSession : SurfaceComposerClient的Java层代理
SurfaceComposerClient : SurfaceFlinger与Client在WMS中的代理
ComposerService : SurfaceFlinger在ServiceManager中注册的Service
WindowStateAnimator : 负责Window的动画
IGraphicBufferProducer : SurfaceFlinger中BufferQueueProducer的代理对象

SurfaceFlinger进程

SurfaceFlinger : 负责与WMS进行
Client : 每个窗口都会对应一个Client
Layer : 每一个窗口对应的Layer
BufferQueue : 绘制缓冲队列 , 向每个Surface提供绘制的Buffer
BufferQueueProducer : 绘制缓冲队列的生产者 , SurfaceFlinger提供给客户进程
BufferQueueConsumer: 绘制缓冲队列的消费者 , 用于接收客户端发送的Buffer

上一篇 下一篇

猜你喜欢

热点阅读