android中的window总结

来源:互联网 发布:淘宝win10激活密匙 编辑:程序博客网 时间:2024/06/03 15:10

window   表示一个窗口,和android组件activity一样,其本身是不可见的,只是一个窗口的概念,代码上表现为是一个抽象类,实际中对window的操作都是通过windowManager来完成,window的实现是通过windowManagerService来实现。而windowManager和windowManagerService之间的交互是一个IPC过程,即进程间通信(可参考:http://www.cnblogs.com/CheeseZH/p/5264465.html)。window的唯一实现对象是PhoneWindow。


view  是所有控件的父类,view是window具体化的实体存在。在android中,每一个window对应着一个view和一个viewRootImpl,其中,viewRootImpl为view和window的交互提供了桥梁。


windowManager实现了viewManager接口,并重写了addview、removeview、updateviewlayout三个方法,可以看出windowManager对window的操作实际上是对view的操作,这也体现了view和window间的关系:window实际上是view的直接管理者。


view的存在必须依附于window上,android中所有的视图包括activity、dialog、toast、等都是view的体现,都依附于window。


windowManager的LayoutParams几个参数:

----------------------Flags: 控制window的显示特性:

a.FLAG_NOT_FOCUSABLE: window不获取焦点,也不接受各种输入事件,所有事件直接传递到下层有焦点的window。

b.FLAG_NOT_TOUCH_MODAL:当前window区域以外的单击事件传递给底层的window。区域以内的单击事件则自己消化处理

(该标记相当重要,一般都要开启此标记,否则window将无法收到单击事件)

c.FLAG_SHOW_WHEN_LOCKED:让window显示到锁屏界面。

----------------------Type: 表示window的类型。


window的类型有三类:应用window、子window和系统window。

1.应用类window对应着一个activity。

2.子window附属于一个服务window,不能单独存在(比如dialog)。

3.系统window是需要声明权限在能创建的widow(比如toast)。

widow是分层的层级大的会覆盖在层级小的window上。

在三类window中,应用window的层级范围是1-99,子window的层级范围是1000-1999,系统window的层级范围是2000-2999。

原创粉丝点击