您的位置:华清远见教育科技集团 >> Android资料 >> Android Surface Flinger 服务器概述  
 
Android Surface Flinger 服务器概述
分享到:

在Android中,渲染主要是通过Android渲染管理器Surface Flinger来管理的。Surface Flinger通过管理一系列的Surface并对Surface进行组合,然后借助Skia和OpenGL ES来完成终的渲染操作,Surface Flinger使Android的渲染机制显得十分出色。

Android的图形系统同样采用了C/S架构的机制,服务器(Surface Flinger)端代码主要由C++编写,客户端代码则分为两个部分,一部分为Java编写的供应用调用的API,另一部分(SurfaceComposerClient)为C++完成的底层原生实现。Surface Flinger框架如图-1所示。


图-1 Surface Flinger框架

Android图形系统中一个重要的概念就是Surface。每个Surface都会创建一个画布(Canvas)对象,每个画布对象都对应于一个位图(Bitmap)对象,该位图对象存储着视图(View)及其子类等UI控件画在Surface上的内容。

在通常情况下,每个Surface对应着两个缓冲:前端缓冲(Front Buffer)和后端缓冲(Back Buffer)。其中后端缓冲即在画布对象上渲染信息时,画布对象对应的那个位图对象。

应用通过SurfaceView、ViewRoot等创建Java Surface(同时创建Canvas),并将图形绘制到Surface对象上,终渲染到屏幕。

Java Surface通过Java JNI调用原生 Surface来实现Java Surface 的功能。

原生Surface创建这个ISurface (BnSurface)并发送命令,如更新Surface内容到屏幕上。Server端接受这个命令并执行相应操作。

每个Surface对应一个层(Layer)对象,Surface Flinger负责将各个层对象的前端缓冲组合并渲染到屏幕上。

多个 Layer 构成一个层向量 LayerVector ,它包含了当前所有 Surface 对应的 Layer。Surface Flinger 根据每个 Layer 的 Z序(Z-order) 把多个Layer组合为一个终在屏幕上显示的缓冲 。

Z 序实际定义了窗口之间的层叠顺序。说起“Z序”这个名称,实际是相对屏幕坐标而言的。一般而言,屏幕上的所有窗口均有一个坐标系,即原点在左上角,X轴水平向右,Y轴垂直向下的坐标系。Z序是相对于一个假想的Z轴而言的,这个 Z 轴从屏幕外指向屏幕内。窗口在这个 Z 轴上的值,就确定了其 Z 序。Z序值大的窗口,覆盖了Z序值小的窗口。

在LayerVector里每个Layer都对应一个 Z 序值,同时通过给Layer设定优先级的方式,使得某些Layer可以实现前端显示,后通过相应的裁剪算法来计算可以被显示的区域。

图-2从依赖关系层面详细地展现了Surface、Layer、Surface Flinger的关系。


图-2 Surface Flinger的类图

 更多相关文章

·Android 属性动画开发源码
·Android系统层次结构及分析
·Android平板电脑的设计
·Android本地服务的启动
·Android项目的mvc模式