Android Window、WindowManager、WMS

1.窗口Window

一个app从启动到主窗口显示出来,需要app、AMS、WMS、SurfaceFlinger(SF)等几个模块相互合作。app负责业务逻辑,绘制自己的视图;AMS管理组件、进程信息和Activity的堆栈及状态等;WMS管理Activity对应的窗口、子窗口以及系统窗口等(也就是控制ViewRoot之间的组合排版);SF用于管理图形缓冲区,将app绘制的东西(也就是ViewRoot)合成渲染在屏幕上。

Android中真正展示给用户的并不是Activity,而是Window和View,Activity的作用就是处理一些逻辑问题,比如生命周期管理以及建立窗口。

view不能单独存在,它必须要附着在Window这个抽象概念上。每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系,因此有视图的地方就有Window,比如Activity、Dialog、Toast等。说明View是Window存在的实体,Window是实际view的直接管理者。在实际使用中无法直接访问Window,对Window的访问必须通过WindowManager。

Android的窗口分为三种类型:

①系统窗口(System Window):系统设计的,可以单独存在,不依附于任何应用的窗口,比如状态栏(Status Bar)、导航栏(Navigation Bar)、壁纸(Wallpaper)、来电显示窗口(Phone)、锁屏窗口(KeyGuard)、信息提示窗口(Toast)、音量调整窗口、鼠标光标等。

②子窗口(Sub Window):比如应用自定义的对话框或者输入法窗口,子窗口必须依附于某个应用窗口(设置相同的token)。

③应用程序窗口 (Application Wi

猜你喜欢

转载自blog.csdn.net/zenmela2011/article/details/129177377