window z-order概念:
window z-order 表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假想的轴定位的, 这个轴就是从屏幕向外伸展的Z轴。z-order最上面的窗口覆盖所有其它的窗口,z-order最底层的窗口被所有其他的窗口覆盖。 应用程序设置窗口在z-order的位置是通过把它放在一个给定的窗口的后面,或是放在窗口堆的顶部或底部。
Window:
在Activity里,Window 是一个抽象类,代表了一个矩形的不可见的容器,里面布局着若干个可视的区域(View).?
从用户角度来看,Android是个多窗口的操作系统,不同尺寸的窗口区域根据尺寸,位置,z-order及是否透明等参数 叠加起来一起并最终呈现给用户。这些窗口既可以是来自一个应用,也可以来自与多个应用,这些窗口既可以显示在一个平面,也可以是不同的平面。 总而言之,窗口是有层次的显示区域,每个窗口在底层最终体现为一个个的矩形Buffer, 这些Buffer经过计算合成为一个新的Buffer,最终交付Display系统进行显示。
系统窗口(System Window): 系统设计的,不依附于任何应用的窗口,如下: 状态栏(Status Bar), 导航栏(Navigation Bar), 壁纸(Wallpaper), 来电显示窗口(Phone), 锁屏窗口(KeyGuard), 信息提示窗口(Toast), 音量调整窗口,鼠标光标等等。
子窗口(Sub Window):比如应用自定义的对话框,或者输入法窗口,子窗口必须依附于某个应用窗口(设置相同的token)。
surface:
在Android中,Window与Surface一一对应。 如果说Window关心的是层次和布局,是从设计者角度定义的类,Surface则从实现角度出发,是工程师关系和考虑的类。 Window的内容是变化 的,Surface需要有空间来记录每个时刻Window的内容。在Android的SurfaceFlinger实现里,通常一个Surface有两块 Buffer,? 一块用于绘画,一块用于显示,两个Buffer按照固定的频率进行交换,从而实现Window的动态刷新。
SurfaceView:
SurfaceView本身是一个View,符合一切View的特性,需要通过Canvas画布绘制。
SurfaceView拥有独立的Surface(绘图表面),即它不与其宿主窗口共享同一个Surface。 一般来说,每一个窗口在SurfaceFlinger服务中都对应有一个Layer,用来描述它的绘图表面。对于那些具有SurfaceView的窗口来说, 每一个SurfaceView在SurfaceFlinger服务中还对应有一个独立的Layer或者LayerBuffer,用来单独描述它的绘图表面,以区别于它的宿主窗口的绘图表面。 因此SurfaceView的UI就可以在一个独立的线程中进行绘制,可以不会占用主线程资源。
SurfaceView是用Zorder排序的,他默认在宿主Window的后面,SurfaceView通过在Window上面“挖洞”(设置透明区域)进行显示
|