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

图形系统整体框架

窗口管理框架

窗口(Window)的结构

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

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

Window的虚拟根View -- ViewRootImpl

            

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

Android应用程序UI的绘制过程

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

 WindowManagerService

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

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

View坐标系 

(图5.DecorView=ViewGroup; contentview中的控件是xml文件经过解析生成的view对象)

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

参考《老罗的android之旅》 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值