Android R WindowManagerService模块(1) WMS整体架构及启动过程

本文探讨了Android R中的WindowManagerService(WMS)模块,特别是其启动流程和整体架构。WMS通过复杂的窗口层级管理简化DisplayArea,并以Surface形式交给SurfaceFlinger合成显示。启动过程中,WMS在`main()`方法中创建实例,接着`onInitReady()`初始化Policy,`setWindowManagerCallbacks()`设置InputCallback,并在`displayReady()`中更新DisplayContent配置。WMS的运作与PhoneWindowManager策略紧密相关,而InputManagerService通过InputCallback与WMS交互。
摘要由CSDN通过智能技术生成

DisplayArea是Android R上新添加的容器,目的就是将复杂的窗口层级管理简单化、低耦合。

而在树结构中,各个容器结构如下:

window_tree.png

可以看到,在树结构中,根节点为RootWindowContainer,叶子节点为WindowState。 正是通过这种结构,WMS中将系统中所有的窗口显示管理得井井有条,并将所有窗口以Surface的形式送到SurfacaFlinger中进行合成和显示。

2.WMS启动流程

接下来我们看下WMS的启动过程。WindowManagerService没有继承与SystemService,而是直接继承了IWindowManager.Stub接口,因此启动过程中,和SytemService的启动有区别。在system_server中,通过以下这些操作完成了WMS的启动:

// frameworks/base/services/java/com/android/server/SystemServer.java

private void startOtherServices(@NonNull TimingsTraceAndSlog t) {
// 创建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 config = wm.computeNewConfiguration(DEFAULT_DISPLAY);
Displ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值