android 界面是如何显示到屏幕上的

  android 系统提供了一系列的绘图渲染api,这些api支持2D绘图和3D绘图;那么理解这些api是如何工作的,还是十分重要的。应用开发者最常用的就是Canvas和OpenGL,Canvas侧重于2D,而OpenGL则是全能。Canvas的绘图操作最终会通过OpenGLRender进行转换,转换为OpenGL支持的动作,并由GPU渲染;也就是说Canvas也是通过OpenGL库工作的。

  无论你使用哪种api,这些操作最终还是会渲染到Surface上。Surface代表了生产者,负责生产BufferQueue;与它对立的是作为消费者的SurfaceFlinger。

下面的图讲述了主要部件的工作流程。


Image Stream Producers

  图像生产者:任何生成graphics buffer的组件,包括但不限于Canvas,OpenGL,多媒体服务,视频解码器。

Image Stream Consumers

  图像消费者: 这个图像流消费者一般指的是SurfaceFlinger系统服务,SurfaceFlinger负责组织可视Surface,并修改Display,只有SurfaceFlinger可修改DisPlay。OpenGL ES app比如相机程序,carmera也可以消耗图像流。

Window Manager

  负责管理系统中的Window,Window manager由Surface支持实现,Window Manager将元数据发动到SurfaceFlinger。

Hardware Composer

  用来展示子系统的硬件抽象层,SurfaceFlinger可以帮助OpenGL 和GPU做已经明确的,组合数据的工作,这样就能减轻GPU和OpenGL的工作,这样会更省资源和电量。SurfaceFlinger工作还是利用OpenGL ES,相当于OpenGL ES 客户端。

Gralloc

  graphics memory allocator 绘制内存生成器

猜你喜欢

转载自blog.csdn.net/jiabailong/article/details/52526680