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。

参考

相关推荐
非专业程序员Ping6 小时前
HarfBuzz概览
android·ios·swift·font
Jeled7 小时前
「高级 Android 架构师成长路线」的第 1 阶段 —— 强化体系与架构思维(Clean Architecture 实战)
android·kotlin·android studio·1024程序员节
明道源码9 小时前
Kotlin 控制流、函数、Lambda、高阶函数
android·开发语言·kotlin
消失的旧时光-194311 小时前
Kotlin × Gson:为什么遍历 JsonObject 要用 entrySet()
android·kotlin·数据处理·1024程序员节
G果12 小时前
安卓APP页面之间传参(Android studio 开发)
android·java·android studio
曾凡宇先生13 小时前
无法远程连接 MySQL
android·开发语言·数据库·sql·tcp/ip·mysql·adb
zhangphil15 小时前
Android GPU的RenderThread Texture upload上传Bitmap优化prepareToDraw
android
柿蒂16 小时前
聊聊SliverPersistentHeader优先消费滑动的设计
android·flutter
假装多好12318 小时前
android三方调试几个常用命令
android·1024程序员节·三方,gms
侧耳42918 小时前
android11禁止安装apk
android·java·1024程序员节