Android Framework 面试系列(五)Window

Window 是什么

Window 是 Android 中窗口的宏观定义,主要是管理 View 的创建,以及与 ViewRootImpl 的交互,将 Activity 与 View 解耦。Window 分三种类型,对应着三种层级,如下表所示:

Window 类型 层级范围 说明
应用Window 1 ~ 99 对应着一个 Activity
子 Window 1000 ~ 1999 不能单独存在,需要附属在特定的 Window 之中,例如常见的 PopupDialog,就是子 Window。
系统 Window 2000 ~ 2999 需要声明权限才能创建的 Window例如 Toast 和 系统状态栏这些都是系统的 Window

需要注意,Window 分层的目的是在显示时层级高的会覆盖层级低的窗口。

Window 和 Activity 的关系

应用 Window 表示类是 PhoneWindow,其继承于Window。在应用中,一个 Activity 对应 一个 PhoneWindow。它们的关系如下图所示:

可以看到一个 Activity 对应一个 Window 也就是 PhoneWindow,一个 PhoneWindow 持有一个 DecorView 的实例,DecorView 本身是一个 FrameLayout。

PhoneWindow 的创建和显示流程

完整的 View 显示流程如下图所示:

可以看到,PhoneWindow 是由 Activity 的 attach 方法创建的。在创建完成后,通过 ViewRootImpl 的 setView 方法来往 WindowManagerService 添加 Window。

参考

相关推荐
稻草人不怕疼42 分钟前
Android 15 全屏模式适配:A15TopView 自定义组件分享
android
静默的小猫43 分钟前
LiveDataBus消息事件总线之二-(不含反射和hook)
android
~央千澈~2 小时前
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
android·laravel·软件开发·金融策略
_一条咸鱼_2 小时前
Android Runtime冷启动与热启动差异源码级分析(99)
android·面试·android jetpack
用户2018792831672 小时前
Java序列化之幽灵船“Serial号”与永生契约
android·java
用户2018792831672 小时前
“对象永生”的奇幻故事
android·java
枷锁—sha3 小时前
【BUUCTF系列】[HCTF 2018]WarmUp1
android·网络·web安全·网络安全
梦想改变生活4 小时前
《Flutter篇第二章》MasonryGridView瀑布流列表
android·flutter
杨航 AI5 小时前
PHP 5.5 Action Management with Parameters (English Version)
android·开发语言·php
柿蒂6 小时前
一次Android下载优化,CDN消耗占比从50+%到1%
android·android jetpack