先来说说窗口创建的过程.
从Wms的角度来看,窗口是一个View, Wms收到用户消息后, 需要把消息派发到View窗口, View本身不能接受消息, 真正接受用户消息的是 IWindow类, 而实现IWindow类的是 ViewRoot.W类, 每一个W类 内部都包含了一个View变量.
Wms把消息发送给W, W发送给View,之后由View自己处理.
窗口也是有很多种的.
关于窗口.Framework定义了三种类型,全部定义在了WindowManager类中.
第一种为有应用窗口类型 : 应用窗口指 该窗口对应一个Activity,因为加载Activity是由AMS完成的.所以创建应用窗口,只能在Activity内部来进行
第二种为子窗口: 所谓子窗口,该窗口必须有一哥父窗口, 父窗口可以使任何类型.
第三种为系统窗口:系统窗口不需啊哟对应任何Activity, 也不需要父窗口, 理论上是无法创建系统窗口,因为Activity没有权限, 系统进程可以创建系统窗口.
WindowManager对着三种类型进行了细化, 用int常量表示,这些实际代表了窗口对应的层(Layer),在Wms进行窗口叠加时, int值越大, 代表层的位置越靠上.表的类型如下所示: