Android窗口层级管理以及WindowManager中Type的定义

        Framework定义了三种窗口类型,三种类型的定义在WindowManager类中。

    第一种为应用窗口。所谓的应用窗口是指该窗口对应一个Activity,由于加载Activity是 由 AmS完成的,因此,对于应用程序来讲,要创建一个应用类窗口,只能在Activity内部完成。

    第二种是子窗口。所谓的子窗口是指,该窗口必须有一个父窗口,父窗口可以是一个应用类型窗口,也可以是任何其他类型的窗口。

    第三类是系统窗口。系统窗口不需要对应任何Activity,也不需要有父窗口。对于应用程序而言,理论上是无法创建系统窗口的,因为所有的应用程序都没有这个权限,然而系统进程却可以创建系统窗口。
    WindowManager类对这三种类型进行了细化,把每一种类型都用一个int常量表示,这些实际上代表了窗口对应的层 (Layer)。 WmS在进行窗口叠加时,会 按 照 该 int常量的大小分配不同层, int值越大 ,代表层的位置越靠上面,即所谓的z-order。
    类型一的定义如表8-1 所示。《Android窗口层级管理以及WindowManager中Type的定义》

《Android窗口层级管理以及WindowManager中Type的定义》



    同样,当具备创建系统窗口权限时,创建系统窗口可以指定层值在20002999之间, WmS在进行窗口叠加时,会动态调整该层值。所不同的是,由于有些系统窗口只能出现一个,即不能添加多个,否则用户会觉得很乱,比如输入法窗口,再比如系统状态条窗口,因此, WmS在接收到创建窗口的消息
时,会进行一定的检查,确保该窗口只能被创建一次





    原文作者:浮若小生
    原文地址: https://blog.csdn.net/QQ676963436/article/details/42521103
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞