WMS 作为系统服务,也是在 SystemServer 内部启动的。Android 系统在启动的时候,会启动两个重要的进程,一个是 Zygote 进程,另一个是由 Zygote 进程 fork 出来的 system_server 进程,SystemServer 会启动我们在系统中所需要的一系列 Service。
源码位置:/frameworks/base/services/java/com/android/server/SystemServer.java
- private void startOtherServices() {
- ……
- // 声明了 WMS 和 IMS
- WindowManagerService wm = null;
- InputManagerService inputManager = null;
- ……
- // 创建了 IMS
- t.traceBegin("StartInputManagerService");
- inputManager = new InputManagerService(context);
- t.traceEnd();
-
- t.traceBegin("StartWindowManagerService");
- // WMS需要传感器服务准备好
- mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_SENSOR_SERVICE);
- // 调用了 WMS 的 main 方法,并且传入了 IMS。WMS 是 IMS 的中转站。
- // WindowManagerService.main方法运行在SystemServer的run方法中,即运行在system_server线程中。
- wm =