一、基础准备阶段(1-2周)
-
Android系统架构基础
- 精读《Android系统源代码情景分析》第3章 “Android应用程序框架”
- 掌握Binder机制原理(重点理解AIDL和Proxy/Stub模式)
- 了解SurfaceFlinger基本工作原理
-
开发环境搭建
- 配置AOSP编译环境(推荐Ubuntu 20.04)
- 下载Android 12源码(重点关注
frameworks/base/services
目录) - 安装Android Studio + Cuttlefish模拟器(用于系统级调试)
-
必要知识储备
- 复习Java反射机制(WindowManagerGlobal等类的实现依赖)
- 理解ViewRootImpl工作机制
- 掌握Android图形系统基础概念(Surface/SurfaceControl/Canvas)
二、核心理论深化(2-3周)
-
WMS核心机制
- 精读官方文档WindowManager
- 理解窗口层级树结构(WindowToken/AppWindowToken/WindowState)
- 掌握窗口类型分类(Application/SubWindow/SystemWindow)
-
关键流程研究
- 窗口添加流程(addWindow)
- 布局计算流程(performLayoutAndPlaceSurfacesLocked)
- 输入事件分发路径(InputDispatcher -> WMS -> ViewRootImpl)
-
源码分析技巧
- 使用Android Studio的
Navigation -> Type Hierarchy
功能 - 重点分析类:
WindowManagerService.java
(3.5万行核心逻辑)WindowState.java
(窗口状态管理)DisplayPolicy.java
(多窗口策略实现)
- 使用Android Studio的
三、工具链掌握(1周)
-
调试工具
adb shell dumpsys window
命令解析:adb shell dumpsys window windows > window_dump.txt grep "Window #" window_dump.txt # 快速定位窗口层级
- Systrace图形分析:
python systrace.py wm am gfx view -o mytrace.html
-
性能分析工具
- 使用
SurfaceFlinger帧分析
:adb shell dumpsys SurfaceFlinger --latency
- Perfetto系统跟踪。
- 使用
-
自定义日志
- 在WMS中添加调试日志:
// WindowManagerService.java Slog.d(TAG_WM, "Window added: " + window + " type=" + attrs.type);
- 在WMS中添加调试日志:
四、实战训练(4-6周)
-
问题排查案例
- 窗口泄露检测:
// 在ViewRootImpl中添加GC监控 protected void finalize() throws Throwable { Slog.w(TAG, "ViewRootImpl GC: " + mWindowAttributes.getTitle()); super.finalize(); }
- 输入延迟优化:通过修改
InputDispatcher.cpp
中的KEY_DISPATCHING_TIMEOUT
值
- 窗口泄露检测:
-
功能定制开发
- 实现自定义窗口动画:
// WindowStateAnimator.java void createScaleAnimation(float from, float to) { mAnimation = new ScaleAnimation(from, to, from, to); }
- 修改窗口布局策略:
// DisplayPolicy.java public void layoutWindowLw(...) { // 自定义状态栏位置逻辑 }
- 实现自定义窗口动画:
-
AOSP实战项目
- 添加新窗口类型:
// WindowManager.java public static final int TYPE_MY_CUSTOM_WINDOW = FIRST_SYSTEM_WINDOW + 100;
- 实现分屏模式增强功能
- 添加新窗口类型:
五、进阶研究(持续)
-
图形系统深度
- 研究Vulkan与WMS的交互
- 分析
SurfaceControl.Transaction
的异步提交机制
-
性能优化专题
- 窗口渲染优先级调度
- 多显示器场景下的内存优化
-
前沿技术跟踪
- 折叠屏适配原理(DisplayFoldController)
- 动态刷新率协调机制(RefreshRatePolicy)
六、推荐学习资源
-
经典书籍
- 《深入理解Android内核设计思想(第2版)》第12章
- 《Android系统源代码解析》WM章节
-
优质博客
- Gityuan博客:WindowManagerService
- 官方技术会议视频:Android窗口系统演进
-
社区资源
- AOSP Gerrit:windowmanager-service
- XDA开发者论坛:Advanced Window Management
七、学习路径总结
学习建议:
- 建议每天投入2小时专注学习
- 结合CLion或Android Studio进行源码跳转分析
- 每完成一个阶段后撰写技术笔记
- 参与AOSP邮件列表讨论(android-platform@googlegroups.com)
通过系统化的学习路径,你可以在3-6个月内建立起完整的WMS知识体系,并具备实际开发能力。建议将理论学习和实践操作的比例控制在2:8,重点通过修改AOSP源码和性能调优来加深理解。