我想问一下,无论是什么类型的屏幕绘制,SurfaceFlinger是否总是被调用? 例如,将JPG文件显示到屏幕上。
我想问一下,无论是什么类型的屏幕绘制,SurfaceFlinger是否总是被调用? 例如,将JPG文件显示到屏幕上。
SurfaceFlinger并不是绘制窗口的工具。它为您的窗口分配了一个帧缓冲区,由运行在应用程序中的框架直接绘制到其中而不与SurfaceFlinger交互。当您绘制完一帧后,SurfaceFlinger仅涉及将最终的新帧缓冲合成到屏幕上。
SurfaceFlinger是Android系统服务,负责将所有应用程序和系统表面合成到单个缓冲区中,最终由显示控制器显示。
让我们详细了解上述语句。
SurfaceFlinger是一个系统级服务,但应用开发人员不能像传感器或其他服务一样直接使用它。每次您想要更新UI时,SurfaceFlinger都会介入。这就是为什么SurfaceFlinger会耗费电池的原因。
除了您的应用程序表面,还有系统表面,包括状态栏、导航栏,以及在发生旋转时,系统为旋转动画创建的表面。大多数应用程序只有一个活动表面 - 当前前台活动表面,其他应用程序在视图层次结构中使用SurfaceView或使用演示模式时会有多个表面。
SurfaceFlinger负责合成所有这些表面。常见的误解是SurfaceFinger用于绘制,这是不正确的。绘图是OpenGL的工作。有趣的是,SurfaceFlinger也使用OpenGL进行合成。
合成结果将放置在系统缓冲区或本地窗口中,这是显示控制器获取数据的源。这就是您在屏幕上看到的东西。