android WMS 详解(二)

发布时间:2026/8/15 17:43:56

android WMS 详解(二)
一、基础概念1. 什么是 WMS它的核心职责是什么管理窗口的添加、删除、更新计算窗口大小和位置Layout管理窗口的层级关系Z-order分配 Surface与 SurfaceFlinger 协作完成显示管理窗口动画处理输入事件的分发2. WMS 在系统架构中的位置与 AMS、SurfaceFlinger 的关系WMS 属于 SystemServer 中的核心服务与 AMSAMS 负责 Activity 生命周期管理WMS 负责 Activity 对应窗口的显示AMS 通过 WMS 添加/移除窗口与 SurfaceFlingerWMS 负责窗口逻辑管理SurfaceFlinger 负责图层合成与显示WMS 为每个窗口申请 SurfaceSurfaceFlinger 将这些 Surface 合成到屏幕上二、Window 的添加流程3. 从addView()到 WMS 的完整流程是怎样的WindowManagerImpl.addView()→WindowManagerGlobal.addView()创建ViewRootImpl调用ViewRootImpl.setView()通过 IPC 调用WMS.addWindow()Session → WMSWMS 创建WindowState检查权限和窗口类型分配Surface建立与 SurfaceFlinger 的连接执行performTraversals()触发测量、布局、绘制4.WindowToken和AppWindowToken是什么WindowToken窗口的令牌用于标识一组窗口的归属是 WMS 中窗口的身份证AppWindowToken继承自 WindowToken专门用于 Activity 对应的窗口与 AMS 中的ActivityRecord一一对应5.WindowState是什么WMS 中用于表示一个窗口的对象包含了窗口的所有属性位置、大小、类型、层级等每个通过 WMS 添加的窗口都会对应一个 WindowState三、窗口层级与类型6. Android 窗口有哪些类型层级如何划分Application Window1-99普通应用窗口如 ActivitySub Window1000-1999子窗口如 Dialog必须依附于父窗口System Window2000-2999系统窗口如状态栏、Toast、输入法7. 什么是type和layertype窗口类型决定窗口的基本层级layer实际计算的层级值由 type 加上一些调整值如子窗口的相对位置计算得出决定窗口在 Z 轴上的顺序8. 为什么 Dialog 的 Window 类型是TYPE_APPLICATION而不是子窗口实际上 Dialog 使用的是TYPE_APPLICATION属于应用窗口但 Dialog 的 token 必须和 Activity 的 token 一致这是通过mParentWindow关联实现的真正的子窗口如 PopupWindow使用TYPE_APPLICATION_PANEL等类型四、测量、布局与绘制9.performTraversals()在 WMS 流程中的作用ViewRootImpl 中的核心方法触发整个 View 树的遍历内部调用measure()、layout()、draw()在 WMS 流程中窗口大小确定后会触发performTraversals()进而申请 Surface 并进行绘制10. WMS 如何确定窗口的大小考虑因素屏幕尺寸、系统装饰状态栏、导航栏、窗口的 LayoutParams宽高、gravity、margin 等WindowFrames类记录了窗口的各种边界parent frame、display frame、content frame 等通过computeFrames()方法计算最终大小11. 什么是mAttachInfoView.AttachInfo对象在 ViewRootImpl 中创建包含了窗口相关的关键信息如 WindowToken、Surface、硬件加速状态等通过dispatchAttachedToWindow()传递给 View 树中的每个 View五、Surface 与显示12. Surface 是什么时候创建的在ViewRootImpl.relayoutWindow()中通过 WMS 的relayout()方法请求创建WMS 与 SurfaceFlinger 通信创建对应的 Layer返回 Surface 给应用端应用端通过Surface.lockCanvas()获取 Canvas 进行绘制13. 什么是SurfaceControlAndroid 高版本Android 10引入的 Surface 控制类用于更精细地控制 Surface 的属性位置、大小、透明度等减少了应用层与 SurfaceFlinger 的直接交互通过 WMS 统一管理14. 硬件加速与 WMS 的关系WMS 在创建窗口时会判断是否开启硬件加速硬件加速使用RenderThread进行绘制最终通过 OpenGL ES 渲染到 SurfaceWMS 通过SurfaceControl.Transaction提交图层变化给 SurfaceFlinger六、事件分发15. 触摸事件是如何传递到窗口的输入事件由InputManagerServiceIMS从驱动读取IMS 通过InputDispatcher将事件分发给目标窗口WMS 维护着窗口的触摸区域信息帮助 InputDispatcher 确定事件该发给哪个窗口最终通过InputChannel基于 socket将事件发送到应用端的ViewRootImpl应用端进行事件分发dispatchTouchEvent()→onInterceptTouchEvent()→onTouchEvent()16. 什么是InputChannel用于 IMS 与应用程序之间传递输入事件的通道基于 Unix Domain Socket 实现在添加窗口时创建与窗口一一对应七、Activity 启动与窗口17. Activity 启动时窗口是如何显示出来的AMS 请求 WMS 创建AppWindowTokenActivity 执行onCreate()→onResume()ViewRootImpl.setView()调用 WMS.addWindow()WMS 创建 WindowState分配 Surface执行performTraversals()进行首次绘制绘制完成后通知 WMSWMS 通知 SurfaceFlinger 合成显示18. 为什么会出现黑屏/白屏如何优化原因Activity 启动到第一帧绘制完成需要时间期间显示的是 Window 的背景色优化方案设置windowBackground为启动图Splash Screen 方案延迟初始化减少onCreate()工作量使用PreviewWindow机制八、多窗口与特殊场景19. 分屏/多窗口模式下 WMS 如何工作WMS 维护TaskStack和Task的层级结构多窗口模式下窗口的 bounds 不再是全屏而是根据分屏比例计算WindowContainer体系Android 8引入了更灵活的容器管理20. 什么是WindowContainerAndroid 8.0 引入的窗口容器体系包含WindowContainer→RootWindowContainer→DisplayContent→TaskDisplayArea→Task→ActivityRecord→WindowToken→WindowState提供了更清晰的层级管理和遍历能力21. Toast 为什么使用系统窗口Toast 使用TYPE_TOAST系统窗口类型不需要依附于 Activity可以在应用退出后显示Android 7.0 后限制了普通应用使用TYPE_TOAST的权限防止恶意弹窗九、高频深入问题22.Choreographer与 WMS 的关系Choreographer 负责接收 VSync 信号协调动画、输入、绘制的时机WMS 的窗口更新和 SurfaceFlinger 的合成都是基于 VSync 的ViewRootImpl通过 Choreographer 安排performTraversals()的执行23. 窗口动画是谁负责的WMS 负责窗口动画的管理如打开、关闭、切换动画通过WindowAnimator和RemoteAnimationController实现动画可以运行在系统进程WMS或应用进程通过 SurfaceControl.Transaction24. 如何理解relayout()方法ViewRootImpl调用 WMS.relayout() 来更新窗口属性主要工作重新计算窗口大小、创建/调整 Surface、更新窗口层级是窗口变化时的核心调度方法25. Android 12 的 SplashScreen API 与 WMS 的关系Android 12 系统实现了原生的 SplashScreen 机制WMS 在创建 AppWindowToken 时自动添加 SplashScreen 窗口应用第一帧绘制完成后WMS 负责过渡切换

相关新闻

android WMS 详解

android WMS 详解

2026/8/15 17:43:56

Android WMS(Window Manager Service)详解WMS(Window Manager Service)是 Android 系统的核心服务之一,负责窗口的管理、布局、动画、层级排序以及输入事件的分发。它是连接应用层(View 系统)与…

NXLoader 完整指南:安卓手机免 root 启动 Switch 自制系统的终极玩法

NXLoader 完整指南:安卓手机免 root 启动 Switch 自制系统的终极玩法

2026/8/15 17:43:56

NXLoader 完整指南:安卓手机免 root 启动 Switch 自制系统的终极玩法 【免费下载链接】NXLoader My first Android app: Launch Fuse Gele payloads from stock Android (CVE-2018-6242) 项目地址: https://gitcode.com/gh_mirrors/nx/NXLoader 周末约好和朋…

EasyMocap 无标记动捕指南:绕开 5 个新手陷阱,3 步拿到首个三维动作数据

EasyMocap 无标记动捕指南:绕开 5 个新手陷阱,3 步拿到首个三维动作数据

2026/8/15 17:43:56

EasyMocap 无标记动捕指南:绕开 5 个新手陷阱,3 步拿到首个三维动作数据 【免费下载链接】EasyMocap Make human motion capture easier. 项目地址: https://gitcode.com/gh_mirrors/ea/EasyMocap EasyMocap 是一款开源的无标记人体运动捕捉工具…

LFM2.5-8B-A1B-MLX-4bit商业应用指南:LFM1.0许可证条款与合规要点

LFM2.5-8B-A1B-MLX-4bit商业应用指南:LFM1.0许可证条款与合规要点

2026/8/15 19:03:59

LFM2.5-8B-A1B-MLX-4bit商业应用指南:LFM1.0许可证条款与合规要点 【免费下载链接】LFM2.5-8B-A1B-MLX-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-8B-A1B-MLX-4bit LFM2.5-8B-A1B-MLX-4bit是一款基于MLX格式的高效文本生成模…

实测对比:MiniMax H3不同投影矩阵性能差异(4B vs 8B模型)

实测对比:MiniMax H3不同投影矩阵性能差异(4B vs 8B模型)

2026/8/15 19:03:59

实测对比:MiniMax H3不同投影矩阵性能差异(4B vs 8B模型) 【免费下载链接】ClipProj-MiniMax-H3 项目地址: https://ai.gitcode.com/hf_mirrors/NicoLab28/ClipProj-MiniMax-H3 MiniMax H3作为一款强大的文本到视频生成模型&#xff…

23 翻转链表

23 翻转链表

2026/8/15 19:03:59

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: 输入&a…

Rhinoceros-Crack完整上手指南:看懂资源、安全操作、高效建模一次说清

Rhinoceros-Crack完整上手指南:看懂资源、安全操作、高效建模一次说清

2026/8/15 19:03:59

Rhinoceros-Crack完整上手指南:看懂资源、安全操作、高效建模一次说清 【免费下载链接】Rhinoceros-Crack rhino-crack-download rhino-free-download-full-version-with-crack rhino-crack-2024 rhino-keygen rhino-serial-key rhino-full-crack rhino-cracked-ve…

企业级搜索数据采集方案:Search-Engines-Scraper的批量查询与结果持久化

企业级搜索数据采集方案:Search-Engines-Scraper的批量查询与结果持久化

2026/8/15 19:03:59

企业级搜索数据采集方案:Search-Engines-Scraper的批量查询与结果持久化 【免费下载链接】Search-Engines-Scraper Search google, bing, yahoo, and other search engines with python 项目地址: https://gitcode.com/gh_mirrors/se/Search-Engines-Scraper …

TwIL-LM3 vs 8B大模型:小参数如何在严格推理任务中逆袭?

TwIL-LM3 vs 8B大模型:小参数如何在严格推理任务中逆袭?

2026/8/15 18:53:58

TwIL-LM3 vs 8B大模型:小参数如何在严格推理任务中逆袭? 【免费下载链接】TwIL-LM3 项目地址: https://ai.gitcode.com/hf_mirrors/webAI-Official/TwIL-LM3 在AI大模型参数竞赛愈演愈烈的今天,一款仅有30.8亿参数的轻量级模型TwIL-L…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

2026/8/15 0:03:07

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

2026/8/15 0:03:07

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

2026/8/15 0:03:07

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/15 1:04:46

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…