我想问一下是否总是调用SurfaceFlinger进行任何类型的绘图进入屏幕? 例如,在屏幕上显示JPG文件。
答案 0 :(得分:34)
SurfaceFlinger 不绘制窗口的内容。它为您的窗口分配一个帧缓冲区,在您的应用程序中运行的框架直接绘制,而不与SurfaceFlinger交互。绘制窗口时,SurfaceFlinger所涉及的唯一交互是在绘制完框架后将最终的新帧缓冲区合成到屏幕上。
答案 1 :(得分:17)
是的,SurfaceFlinger是Android的合成器,因此它会显示所有将显示的内容,找出生成的帧的样子,然后将其发送出去,通过显卡的EGL界面显示在屏幕上。
您可以了解它控制Android开发人员Jeff Sharkey在帖子中看到的所有内容的结果tints the whole screen for nightmode。我还发现了一个关于this topic看起来很好的投影仪演示文稿。
答案 2 :(得分:15)
http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-android.html
SurfaceFlinger是一个Android系统服务,负责 将所有应用程序和系统表面合成为一个 最终由显示控制器显示的缓冲区。
让我们放大上面的陈述。
SurfaceFlinger是系统范围的服务,但不是直接服务 应用程序开发人员可以使用传感器或其他服务 是。每次要更新UI时,SurfaceFlinger都会启动 这解释了为什么SurfaceFlinger是一个电池滤水器。
除了你的应用程序表面,还有系统表面, 包括状态栏,导航栏和旋转时, 系统为旋转动画创建的曲面。最 应用程序只有一个活动表面 - 当前的表面 前景活动,其他人在SurfaceView时有多个 在视图层次结构中使用或使用演示模式。
SurfaceFlinger负责复合所有这些曲面。一个 常见的误解是SurfaceFinger用于绘图。它是 不正确。绘图是OpenGL的工作。有趣的是 SurfaceFlinger也使用openGL进行合成。
组合结果将放入系统缓冲区或本机缓冲区 窗口,它是显示控制器从中获取数据的源。 这就是你在屏幕上看到的内容。