ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

「安卓framework基础篇4」什么是SurfaceFlinger?(基于AOSP13)

「安卓framework基础篇4」什么是SurfaceFlinger?(基于AOSP13) 「安卓framework基础篇4」什么是SurfaceFlinger(基于AOSP13)前言肯定有人会疑惑为什么开机动画说得好好的突然跳到SurfaceFlinger了因为用户在屏幕上看到的内容最终都是由SurfaceFlinger合成上屏的无论是用Activity和View绘制出来的画面还是用canvas、OpenGL亦或是Vulkan直接画出来的内容最终都是交给Native层的SurfaceFlinger服务来合成并调用hal层驱动显示到屏幕上的。APP开发层面使用Activity、View创建的画面内容虽然必须通过WMS来间接调用SurfaceFlinger但安卓framework层的代码中也有很多地方是通过直接调用SurfaceFligner将画面显示到屏幕上的开机动画就是其中较典型的场景。可以说SurfaceFlinger是framework最底层的图形合成服务并且SurfaceFlinger的设计也很复杂巧妙如果理解了SurfaceFlinger再学WMS可以说手到擒来轻轻松松。如果先学WMS的话很多调用SurfaceFlinger的地方会让人疑惑打击学习的成就感导致学习积极性下降。好了废话不多说我们一起来看一看SurfaceFlinger吧SurfaceFlinger 做了啥例子SurfaceFlinger负责把每个进程对应的显示区域的可见部分合成到一块屏幕上。如上图的例子打开的是一个通讯录APP的自由窗口这个窗口是在壁纸最底下的白底背景就是壁纸、桌面显示app图标的那一层之上的壁纸和桌面被自由窗口覆盖的部分在屏幕上是看不到的但其实在绘制的时候壁纸进程、桌面进程都会把各自的完整图像绘制出来作为一个图层交给SurfaceFlinger最后由SurfaceFlinger根据各个进程图层的位置、层级关系(例如上图的自由窗口画面层级就在桌面和壁纸之上)、透明度将多个图层合成最终要显示到屏幕上的一帧画面。大纲后续将会推出一系列文章来分析SurfaceFlinger合成上屏的过程大致内容如上图大纲所示。
返回列表