深入解析Android WMS架构设计:容器+树结构的窗口管理之道
创作时间:
作者:
@小白创作中心
深入解析Android WMS架构设计:容器+树结构的窗口管理之道
引用
简书
等
11
来源
1.
https://www.jianshu.com/p/07f965e3cb60
2.
https://blog.csdn.net/baiduwaimai/article/details/141283234
3.
https://blog.csdn.net/u010687761/article/details/131716999
4.
https://zhuanlan.zhihu.com/p/616811057
5.
https://blog.csdn.net/luoqingyan/article/details/126262176
6.
https://blog.csdn.net/weixin_47465999/article/details/134090540
7.
https://blog.csdn.net/qq_40587575/article/details/131671365
8.
https://blog.csdn.net/weixin_42958351/article/details/104098724
9.
https://juejin.cn/post/7226376235557929015
10.
https://juejin.cn/post/7338258719790940194
11.
https://juejin.cn/post/7108658157366280206
在Android系统中,WindowManagerService(简称WMS)负责管理屏幕上的各种显示区域。从状态栏、Activity到锁屏界面,所有可见的窗口都由WMS统一调度。本文将深入解析WMS的整体架构设计,帮助开发者理解其工作原理。
01
WMS架构设计
WMS采用容器+树结构的形式对窗口进行管理,这种设计能够清晰地组织复杂的窗口层级关系。最顶层容器为ConfigurationContainer,它是所有容器的父容器,提供了多个Configuration对象以及用于组织各容器层级的公共逻辑。
在树结构中,各个容器的层次关系如下:
- RootWindowContainer:窗口容器树的根节点。
- DisplayContent:作为RootWindowContainer的子节点,用于管理同一逻辑屏幕上的窗口。
- DisplayChildWindowContainer:DisplayContent中所有子节点的父类。
- WindowContainers:包含一个子节点——DisplayArea.Root,大多数窗口都保存在这个容器中。
- DisplayArea.Root:DisplayContent中最顶层的显示区域,用来保存Tokens、TaskDisplayArea、ImeContainer容器。
- TaskDisplayArea.Tokens:用于保存正常窗口的WindowToken。
- WindowState:窗口对象实例,位于树结构的叶子节点。
通过这种树形结构,WMS能够将系统中所有的窗口显示管理得井井有条,并将所有窗口以Surface的形式送到SurfaceFlinger中进行合成和显示。
02
WMS启动流程
WMS的启动过程与SystemService略有不同,它直接继承了IWindowManager.Stub接口。在system_server进程中,通过以下步骤完成WMS的启动:
创建WMS实例:
wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore, new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);初始化:
wm.onInitReady();设置InputCallback接口:
inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());Display配置更新:
wm.displayReady();系统准备完成:
wm.systemReady();计算Configuration:
final Configuration conf = wm.computeNewConfiguration(DEFAULT_DISPLAY);
03
窗口管理机制
WMS通过WindowState和WindowToken来管理窗口:
- WindowState:描述窗口的属性和状态,如位置、焦点状态等。
- WindowToken:标识窗口身份,如Activity或系统窗口,用于权限和安全控制。
窗口的添加过程如下:
- 客户端通过
WindowManager.addView()请求添加视图。 - 调用
WindowManagerGlobal创建ViewRootImpl,通过Session与WMS交互。 - WMS进行权限校验和参数检查。
- 创建WindowState并关联WindowToken。
- 分配Surface并通过SurfaceFlinger申请图形缓冲区。
窗口的显示顺序由Z-Order决定,离用户越近的窗口Z值越大,能够遮挡住后面的窗口。这种设计确保了窗口的正确显示和交互。
04
总结
WMS是Android系统中负责窗口管理的核心服务,通过容器+树结构的设计,实现了对复杂窗口层级的高效管理。其启动流程和窗口管理机制保证了系统的稳定运行。理解WMS的工作原理,对于开发者解决UI渲染、触摸事件分发等问题具有重要意义。
热门推荐
18-55岁是黄金期,55岁以上需谨慎:吸脂手术年龄指南
洗衣液选购指南:三种有害成分要当心,教你挑选安全产品
买洗衣液看这6点:从清洁效果到环保认证
《流浪地球》科学猜想:如何实现星际穿越?
6部心理惊悚片,窥探内心深处的秘密
尿液颜色暗藏健康密码,十种异常颜色需关注
九制黄精的功效与禁忌:专家详解使用方法和注意事项
九制黄精的功效与作用禁忌有哪些
维吾尔族流行乐坛经典之作:中国最美弗拉门戈吉他曲演奏者带你感受维族民歌的独特魅力
在新疆,一曲长调何以悠扬?
澳门历史城区:25载见证中西建筑艺术完美融合
大三巴牌坊、妈阁庙、圣若瑟修院:澳门中西文化交融的建筑瑰宝
医生提醒:服用阿司匹林时,这六类药物需谨慎联用
慢性肾病治疗迎来突破:从新药研发到临床指南更新
肾脏预警信号,这些症状别轻视
从浸泡到选材:科学应对豆类引起的胀气问题
胃胀气已悄然年轻化,消化酶不足是主因
告别胃胀气:生姜的多种使用方法与注意事项
小米手机刷机秘籍:让你的手机秒变新机
华为手机刷机秘籍:从零开始优化
黑冠黄鹎:头顶黑色羽冠的森林歌手
罗布麻:荒漠中的药用植物,降压降脂效果好
罗布麻茶:温和降压降脂,秋冬养生优选
永劫无间账号交易安全指南:从平台选择到信息保护
2024年《永劫无间》电竞赛事安排出炉,双月挑战赛助力冲击劫杯
永劫无间公测:端手游账号绑定方法及四大福利
永劫无间武器攻略:每种武器的制胜秘诀
公司周年庆朋友圈文案大揭秘
揭秘阿里巴巴和华为的周年庆:如何让科技更有温度
5步绑定永劫无间双端账号,共享装备省金币