【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方法处理窗口焦点切换,确保用户输入正确传递给当前窗口。

➡️

继续阅读