目录
- 一、WMS简介
- 二、窗口的分类
- 三、添加Window
一、WMS简介
Window
:在Android视图体系中Window就是一个窗口的概念。Android中所有的视图都是依赖于Window显示的。
Window是一个抽象的概念,它对应屏幕上的一块显示区域,它不是实实在在的内容,实实在在的内容是View。Window直接管理View。
Window是View的一个容器,View是Window的具体表现
。
每个Activity都对应有一个Window
应用程序窗口、PopupWindow、输入法窗口、Toast、Dialog、系统错误窗口等都是比较常见的Window
WindowManager
:对Window的管理,包括新增、更新和删除等。
横竖屏切换、配置的变化都会导致Window的更新
Dialog的dismiss也是window的删除操作
WindowManagerService(WMS)
:窗口的最终管理者,它负责窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理。
三者的关系:
二、窗口的分类
-
Application Window
:Activity就是一个典型的应用程序窗口。
Type边界值范围:1~99 -
Sub Window
:子窗口,顾名思义,它不能独立存在,需要附着在其他窗口才可以,PopupWindow就属于子窗口。
Type边界值范围:1000~1999跟父窗口共用一个token
-
System Window
:输入法窗口、系统音量条窗口、系统错误窗口、顶部状态栏通知栏、Toast都属于系统窗口。
Type边界值范围:2000~2999
Type指越大,Z轴越大,窗口越靠前,
窗口的次序:
最上层的一定是系统窗口System Window,之后是子窗口Sub Window,最下面是应用程序窗口Application Window
不同类型的窗口的排列次序:
WindowManager关联类
这个地方采用
桥接模式
三、添加Window
Activity#attach()方法之内PhoneWindow
被创建
,并同时创建----WindowManagerImpl
负责维护
PhoneWindow内的内容。
在Activity#onCreate()
中调用setContentVIew()
方法,这个方法内部创建一个DecorView
实例作为PhoneWindow
的内容。
WindowManagerImpl
决定管理DecorView
,并创建一个ViewRootImpl实例,将ViewRootImpl
与View树
进行关联,这样ViewRootImpl就可以指挥
View树的具体工作。