【Android 13源码分析】WMS-添加窗口(addWindow)流程-2-SystemService进程处理
💡
原文中文,约13500字,阅读约需32分钟。
📝
内容提要
本文是Android 13源码分析中WMS-添加窗口流程的第二部分,介绍了SystemService进程处理剩下的逻辑,包括SystemServer进程处理、WindowManagerService::addWindow方法概览、Token相关、WindowState的创建和挂载等。文章还解答了之前提出的疑问。
🎯
关键要点
- 本文为Android 13源码分析中WMS-添加窗口流程的第二部分,重点介绍SystemService进程的处理逻辑。
- SystemServer进程负责处理窗口的创建和挂载,主要通过WindowManagerService::addWindow方法实现。
- addWindow方法中包含权限检查、Token处理、WindowState创建和挂载等多个步骤。
- Token是WindowToken,WindowState的父节点通常是WindowToken,确保窗口的层级关系。
- addWindow方法的主要工作包括获取Token、创建WindowState、调整窗口参数、验证窗口添加权限等。
- WindowState的创建和挂载是addWindow流程的核心,确保窗口能够正确显示在界面上。
- addWindow流程中,WindowState通过ActivityRecord与应用进程的窗口进行关联。
- 总结中提到,WMS中没有直接的Window对象,而是通过WindowState与应用进程的ViewRootImpl进行通信。
❓
延伸问答
SystemServer进程在addWindow流程中负责什么?
SystemServer进程负责处理窗口的创建和挂载,主要通过WindowManagerService::addWindow方法实现。
addWindow方法中有哪些关键步骤?
addWindow方法的关键步骤包括权限检查、Token处理、WindowState创建和挂载等。
什么是WindowToken,它在addWindow流程中有什么作用?
WindowToken是窗口的父节点,确保窗口的层级关系,在addWindow流程中用于获取和管理窗口的层级结构。
WindowState是如何创建和挂载的?
WindowState的创建和挂载是在addWindow方法中进行的,通过创建WindowState对象并将其添加到窗口树中。
addWindow方法中如何处理权限验证?
addWindow方法通过调用mPolicy.checkAddPermission进行权限检查,确保窗口添加的合法性。
addWindow流程中如何处理窗口焦点?
addWindow流程中通过updateFocusedWindowLocked方法处理窗口焦点切换,确保用户输入正确传递给当前窗口。
➡️