Android WindowManager 服务深度解析

📚 共计 30 章节
01
WindowManager 概述
什么是 WindowManager · 系统定位 · 核心职责与作用
概念入门
02
Window 的概念与分类
Window 定义 · Application/Sub/System Window 区别与场景
分类基础
03
WindowManager 的获取方式
Context.getSystemService() · WindowManagerImpl 与 WindowManagerGlobal
获取架构
04
WindowManager 核心接口解析
addView · updateViewLayout · removeView 调用流程与参数
接口核心
05
WindowManager.LayoutParams 详解
type · flags · token · gravity · x/y · width/height · format
属性必知
06
Window 的 Type 类型与层级关系
FIRST_APPLICATION_WINDOW · SUB · SYSTEM · Z-order 排序
层级Z-order
07
WindowManager 的 Flags 标志位
FLAG_NOT_FOCUSABLE · NOT_TOUCHABLE · KEEP_SCREEN_ON · FULLSCREEN
标志常用
08
添加 View 的完整流程
addView → ViewRootImpl → WindowSession → WMS 处理
流程核心
09
ViewRootImpl 的角色与职责
创建时机 · 与 WMS 通信桥梁 · performTraversals() 核心流程
ViewRoot渲染
10
WindowSession 与 Binder 通信
IWindowSession 接口 · Session 实现 · 跨进程调用流程
BinderIPC
11
WindowManagerService 启动与初始化
WMS 创建时机 · systemReady() · DisplayContent 与 DisplayManager
WMS启动
12
WMS 核心数据结构
WindowList · WindowState · DisplayContent · Task · Stack
数据结构组织
13
WindowState 详解
创建 · 属性存储 · 与 IWindow 关联 · 窗口状态维护
WindowState状态
14
WMS 添加窗口流程
addWindow() 完整逻辑 · 权限检查 · token 验证 · Surface 创建
添加流程
15
WMS 删除窗口流程
removeWindow() 执行路径 · 窗口销毁 · Surface 释放 · 回调
删除清理
16
WMS 更新窗口流程
relayoutWindow() 核心逻辑 · 布局更新 · Surface 重新分配
更新重绘
17
窗口动画机制
WindowAnimationSpec · AnimationAdapter · 启动/退出动画
动画过渡
18
窗口焦点管理
焦点分配策略 · focusChanged() · 触摸事件与焦点关系
焦点事件
19
窗口输入事件分发
IMS 与 WMS 协作 · InputChannel · 内核到窗口传递路径
输入事件
20
Surface 与 SurfaceControl
Surface 创建/销毁 · SurfaceControl 作用 · SurfaceFlinger 关系
Surface渲染
21
窗口 Z-order 排序算法
排序规则 · Layer 值计算 · 遮挡与显示优先级
Z-order算法
22
SystemUI 中的 WindowManager 应用
状态栏 · 导航栏 · 锁屏 · 通知面板 · 层级管理
SystemUI实战
23
悬浮窗与权限管理
SYSTEM_ALERT_WINDOW · 创建限制 · 各版本策略变化
权限悬浮窗
24
多窗口模式下的 WindowManager
分屏 · 自由窗口 · 画中画 · 布局与调整逻辑
多窗口适配
25
WindowManager 与 Activity 的关系
Activity 窗口创建 · DecorView 添加 · ActivityRecord 与 WindowToken
ActivityToken
26
WindowToken 与 AppWindowToken
Token 作用 · 窗口分组管理 · 生命周期中的 Token 变化
Token分组
27
窗口显示与隐藏策略
可见性计算 · AppTransition 过渡动画 · 显示超时处理
显示策略
28
WindowManager 的调试与优化
dumpsys window · 查看层级 · 窗口泄漏分析 · 性能优化
调试优化
29
常见问题与避坑指南
窗口泄漏 · 类型选择错误 · 权限 · 多线程 · 兼容性
避坑经验
30
实战案例:可拖拽悬浮球 & 自定义 Toast
拖拽悬浮球 · 自定义 Toast · 系统级悬浮窗完整开发
实战项目