一:背景
WindowManagerService(简称WMS)是Android系统最为重要的服务之一,它管理着系统所有的window,而且还是输入事件下发的中转站。了解其启动、工作流程对于我们写代码、分析问题都是很有帮助的。下面会基于AndroidV的源码,来看下WMS是如何启动的。
二:启动流程
WMS作为系统服务之一,也是由SystemServer启动的,启动WMS主要分为以下几步:
- 启动sensor服务
- 创建WMS对象
- WMS初始化
- Display初始化
- 系统准备完成
//frameworks/base/services/java/com/android/server/SystemServer.java
private void startOtherServices(@NonNull TimingsTraceAndSlog t) {
...
WindowManagerService wm = null;
...
t.traceBegin("StartWindowManagerService");
//启动sensor服务。WMS需要等待sensor启动完成之后再启动
mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_SENSOR_SERVICE);
//初始化WMS对象
wm = WindowManagerService.main(context, inputManager, !mFirstBoot,
new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);
//把WMS加入到ServiceManager中,这样其他地方就可以通过Context.WINDOW_SERVICE获取WMS
ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,
DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PRIORITY_HIGH
| DUMP_FLAG_PROTO);
//把IMS加入到ServiceManager中,这样其他地方就可以通过Context.INPUT_SERVICE获取IMS
ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
/* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
t.traceEnd();
t.traceBegin("SetWindowManagerService");
//ATMS进行window相关的初始化操作
mActivityManagerService.setWindowManager(wm);
t.traceEnd();
t.traceBegin("WindowManagerServiceOnInitReady");
//3. WMS初始化
wm.onInitReady();
t.traceEnd();
...
t.traceBegin("MakeDisplayReady");
try {
//初始化屏幕信息
wm.displayReady();
} catch (Throwable e) {
reportWtf("making display ready", e);
}
t.traceEnd();
...
t.traceBegin("MakeWindowManagerServiceReady");
try {
//系统准备完成
wm.systemReady();
} catch (Throwable e) {
reportWtf("making Window Manager Service ready", e);
}
t.traceEnd();
...
}
2.1 启动sensor服务
WMS会等待在它之前加入到ServiceManager中的所有服务执行完onBootPhase,才会启动,其中就有sensor服务,最终会通过jni启动sensor服务。
//frameworks/base/services/core/java/com/android/server/SystemServiceManager.java
public void startBootPhase(@NonNull TimingsTraceAndSlog t, int phase) {
//下一阶段的值必须比上一阶段的值大
if (phase <= mCurrentPhase) {
throw new IllegalArgumentExcepti

最低0.47元/天 解锁文章
297

被折叠的 条评论
为什么被折叠?



