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 绘制内存生成器