35

我想问一下是否总是调用 SurfaceFlinger 以将任何类型的绘图绘制到屏幕上?例如,在屏幕上显示 JPG 文件。

4

3 回答 3

38

SurfaceFlinger不是绘制你的窗口的东西。它为您的窗口分配一个帧缓冲区,在您的应用程序中运行的框架直接绘制到该窗口,而不与 SurfaceFlinger 交互。绘制窗口时,SurfaceFlinger 所涉及的唯一交互是在绘制完帧后将最终的新帧缓冲区合成到屏幕上。

于 2011-04-18T06:59:53.890 回答
17

是的,SurfaceFlinger 是 Android 的合成器,因此它将显示所有内容,计算出结果帧的外观,然后通过显卡的 EGL 接口将其发送到屏幕上显示。

你可以理解它控制着你在 Android 开发人员 Jeff Sharkey 的帖子中看到的所有内容的结果,他为夜间模式着色了整个屏幕我还发现了一个对这个主题看起来不错的投影仪演示文稿。

于 2011-04-18T06:21:56.733 回答
17

http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-android.html

SurfaceFlinger 是一个 Android 系统服务,负责将所有应用程序和系统表面合成到一个缓冲区中,最终由显示控制器显示。

让我们放大上面的语句。

SurfaceFlinger 是一项系统范围的服务,但不能像 Sensor 或其他服务那样直接提供给应用程序开发人员使用。每次你想更新你的 UI 时,SurfaceFlinger 都会启动。这就解释了为什么 SurfaceFlinger 会消耗电池电量。

除了您的应用程序表面之外,还有系统表面,包括状态栏、导航栏,以及在发生旋转时由系统创建的用于旋转动画的表面。大多数应用程序只有一个活动表面 - 当前前台活动之一,当在视图层次结构中使用 SurfaceView 或使用演示模式时,其他应用程序有多个。

SurfaceFlinger 负责合成所有这些表面。一个常见的误解是 SurfaceFinger 是用于 DRAWING 的。这是不正确的。绘图是 OpenGL 的工作。有趣的是 SurfaceFlinger 也使用 openGL 进行合成。

合成结果将被放入系统缓冲区或本机窗口中,这是显示控制器从中获取数据的来源。这就是您在屏幕上看到的内容。

于 2014-02-09T03:28:54.493 回答