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来显示到屏幕上.

窗口管理框架

窗口(Window)的结构

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

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

Window的虚拟根View -- ViewRootImpl

            

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

Android应用程序UI的绘制过程

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

 WindowManagerService

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

屏幕的基本结构                                                 计算窗口大小 – Visible Region                                           计算窗口大小 – Content Region

 

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

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

参考《老罗的android之旅》 

更多相关文章

  1. NestedScrollView中添加一个android:fillViewport="true"
  2. android的shader渲染器
  3. Android(安卓)系统图形栈(一): OpenGL ES 和 EGL 介绍
  4. Android(安卓)display system overview
  5. CCRenderTexture 从后台进入前台变黑的处理(android)
  6. Android(安卓)应用软件开发(八)窗口布局
  7. android 通过贝塞尔曲线 实现爱心点赞功能
  8. Ubuntu 下用 Eclipse 编译调试 Android(安卓)NDK 工程
  9. Android开发入门之学习笔记(四):程序窗口的布局(二)

随机推荐

  1. Android 支持 Java8
  2. Android双屏电子书ShuBook
  3. 写了个android简洁的日志打印工具类。
  4. Activity页面切换的效果
  5. Android ADT 下载 ( ADT-23.0.7 )
  6. Android:国家气象局天气预报接口JSON完全
  7. Android: QQ UI 设计
  8. android studio查看genymotion模拟器上文
  9. Android Framework---styles.xml
  10. adb下载