Android图形系统草稿

Android UI架构概述(Activity,surfaceFlinger,windows)

Android应用程序UI框架
WindowManagerService
SurfaceFlinger
Android多屏支持

基本概念和元素

表面(Surface) Surface就是指向显存的一个物体,用来被绘制到屏幕上,所有你能看见的Window都拥有可以在上面绘制的Surface.
在安卓中,系统使用Surface Flinger服务来把Surface按照正确的深度信息渲染到最终的屏幕上.
Surface通常在back buffer中进行渲染,完成之后与front buffer交换,这样显示到屏幕上,以实现流畅显示的效果.
窗口(Window): 一个application通过Windows Manager来创建窗口,Windows Manager为每一个窗口(windows)创建Surface来让application在上面绘制各种物体
视图(View): 视图就窗口里的UI元素.一个窗口只拥有一个View Hierarchy,这些View Hierarchy提供了窗口里的所有表现。
当一个窗口需要重新绘制时(比如一个View invalidate自己),锁定Surface,并返回一个Canvas用来在上面绘制,在view hierarchy树向下传递Canvas,来绘制每个view.
 这一切都完成后,Surface被解锁,并通过Surface Flinger交换前后Buffer来显示到屏幕上。
Canvas: Canvas是Surface绘图时返回的一个接口,并提供一些绘图api,用来进行实际的绘图操作。目前Canvas可以绘制在bitmap或者openGL container上。
SurfaceView: 它是View的一个特殊子类,它拥有专有的Surface,使application可以直接在上面绘制(普通的view hierarchy必须共享窗口唯一的surface)。
原理是surfaceview请求Window Manager创建一个新窗口,并改变窗口之间的深度信息来显示。
如果SurfaceView的Window显示在主窗口的后面,surfaceview将主窗口相应的位置设置成透明来使可见。

总结一下: 一个activity拥有一个Windows Manager-->多个windows-->一个Window只有一个Surface&View hierarchy来绘制==SurfaceView实质上是创建了一个新的窗口,所以拥有自己独立的Surface,可以直接绘制在上面-->在view hierarchy树向下传递Canvas,来绘制每个view-->Surface Flinger交换前后Buffer来显示到屏幕上.

窗口管理框架

Android图形系统草稿_第1张图片Android图形系统草稿_第2张图片

窗口(Window)的结构

ViewRootImpl是一个虚拟根View,用来控制窗口的渲染,以及用来与WindowManagerService、SurfaceFlinger通信 DecorView是窗口的真正根View ContentView描述窗口的主题风格

下面3个图可以合成一个图

Android图形系统草稿_第3张图片Android图形系统草稿_第4张图片

Window的虚拟根View -- ViewRootImpl

Android图形系统草稿_第5张图片            

窗口绘图表面 -- Surface                                     窗口视图 -- View

Android图形系统草稿_第6张图片Android图形系统草稿_第7张图片

Android应用程序UI的绘制过程

Android图形系统草稿_第8张图片

软件渲染过程                                                            硬件渲染过程

Android图形系统草稿_第9张图片Android图形系统草稿_第10张图片

 WindowManagerService

职责 计算窗口大小 计算窗口Z轴位置 管理输入法窗口 管理壁纸窗口 执行窗口切换

屏幕的基本结构                                                 计算窗口大小 – Visible Region                                           计算窗口大小 – Content Region
Android图形系统草稿_第11张图片Android图形系统草稿_第12张图片Android图形系统草稿_第13张图片

Android图形系统草稿_第14张图片 Android图形系统草稿_第15张图片

(图5.6可以合并成一张图)

执行窗口切换 – Starting Window (Activity=window;  AWS调用WMS)

Android图形系统草稿_第16张图片

参考《老罗的android之旅》 

你可能感兴趣的:(Android)