当前位置: 首页 > news >正文

WindowManagerService之Window类型篇

一:背景

    WMS作为窗口管理服务,管理着系统中的所有窗口,窗口的种类有很多:Activity、Dialog、Toast、PopupWindow、StatusBar、NavigationBar、System Alart Window等,那么如此多且繁杂的窗口,是否有比较细致的分类呢?答案是肯定的:有。系统把这些窗口分为了三类:应用窗口、子窗口和系统窗口,下面来看下这三类窗口。

二:窗口类型的定义

窗口类型都是定义在WindowManager的静态内部类LayoutParams中。

2.1 应用窗口

Activity就是典型的应用窗口,应用窗口的定义范围为1-99

public interface WindowManager extends ViewManager {
    public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
        ...
        //应用窗口起始值
        public static final int FIRST_APPLICATION_WINDOW = 1;
        //应用窗口的基础值
        public static final int TYPE_BASE_APPLICATION   = 1;
        //普通应用窗口
        public static final int TYPE_APPLICATION        = 2;
        //应用启动窗口,系统在应用启动前显示的窗口,即StartingWindow
        public static final int TYPE_APPLICATION_STARTING = 3;

        public static final int TYPE_DRAWN_APPLICATION = 4;
        //应用窗口最大值
        public static final int LAST_APPLICATION_WINDOW = 99;
        ...
    }
}

2.2 子窗口

PopupWindow就是典型的子窗口,子窗口不能单独存在,必须依附于其他窗口(非子窗口),子窗口的定义范围为1000-1999

public interface WindowManager extends ViewManager {
    public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
        ...
        //子窗口起始值
        public static final int FIRST_SUB_WINDOW = 1000;
        public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;
        public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1;
        public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2;
        public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3;
        public static final int TYPE_APPLICATION_MEDIA_OVERLAY  = FIRST_SUB_WINDOW + 4;
        public static final int TYPE_APPLICATION_ABOVE_SUB_PANEL = FIRST_SUB_WINDOW + 5;
        //子窗口最大值
        public static final int LAST_SUB_WINDOW = 1999;
        ...
    }
}

2.3 系统窗口

StatusBar就是典型的系统窗口,系统窗口的定义范围为2000-2999

public interface WindowManager extends ViewManager {
    public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
        ...
        //系统窗口起始值
        public static final int FIRST_SYSTEM_WINDOW     = 2000;
        //StatusBar
        public static final int TYPE_STATUS_BAR         = FIRST_SYSTEM_WINDOW;
        //SearchBar
        public static final int TYPE_SEARCH_BAR         = FIRST_SYSTEM_WINDOW+1;
        //通话窗口
        public static final int TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2;
        //系统警告窗口
        public static final int TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3;
        //锁屏
        public static final int TYPE_KEYGUARD           = FIRST_SYSTEM_WINDOW+4;
        //Toast
        public static final int TYPE_TOAST              = FIRST_SYSTEM_WINDOW+5;
        ...
        public static final int TYPE_STATUS_BAR_ADDITIONAL = FIRST_SYSTEM_WINDOW + 41;
        //系统窗口最大值
        public static final int LAST_SYSTEM_WINDOW      = 2999;
        ...
    }
}

三:小结

3.1 窗口类型的定义除了区分不同种类窗口外,还有什么用?

    窗口类型(即Type)的值和窗口显示息息相关。SurfaceFlinger显示时,会先对所有窗口进行排序,不同的窗口是以平行于手机屏幕的方式叠加显示的,优先级越高的窗口就离手机屏幕越远(非物理上的远近,只是借用这个概念),Type就影响了窗口的优先级,一般情况下Type越小,窗口的优先级越低,就会被更多的窗口覆盖。

http://www.dtcms.com/a/52133.html

相关文章:

  • 【资料分享】清华大学-187页:AIGC发展研究3.0版
  • Mysql 数据库免费使用
  • Java高频面试之集合-03
  • unity6 打包webgl注意事项
  • Vue3多页面跳转
  • 低代码+AI双重革命:传统软件开发的破局与重生
  • 四款GIS工具箱软件解析:满足企业多样化空间数据需求
  • SPI硬件设计及通信原理解析
  • FLEXOO的传感器技术:从材料选择到生产工艺的全方位创新
  • Cursor+Claude3.7实现从原型到app开发
  • 软考中级-数据库-3.3 数据结构-树
  • 网络安全数据富化 网络数据安全处理规范
  • Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略
  • Ubuntu系统安装Apache2方法
  • 2.数据结构-栈和队列
  • 蓝桥杯C组真题——巧克力
  • STM32之ADC
  • 【文生图】windows 部署stable-diffusion-webui
  • uniapp:小程序将base64图片字符串保存到手机相册
  • Object.defineProperty()
  • 由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务
  • 4 Redis4 List命令类型讲解
  • vscode离线配置远程服务器
  • 代码随想录算法训练营第32天 | 动态规划基础理论、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 【Git】Git基本操作
  • 学习threejs,使用LineBasicMaterial基础线材质
  • Vue中实现大文件的切片并发下载和下载进度展示
  • Spring Boot 的事务回滚
  • 【MySQL_02】安装(8.4.4LTS : Windows + Linux)
  • 在S32K3上实现SOC的神经网络算法的可行性