WMS启动流程
WMS 创建过程中涉及到的类主要有 SystemServer、WindowManagerService(WMS)、WindowManagerPolicy(WMP),它们都在 system_server 进程中运行,但是会在不同线程中运行,如下所示。
启动流程:
(1)main
/frameworks/base/services/java/com/android/server/SystemServer.java
(2)run
/frameworks/base/services/java/com/android/server/SystemServer.java
(3)startOtherServices
/frameworks/base/services/java/com/android/server/SystemServer.java
其中 ServiceManager.addService() 将 Context.WINDOW_SERVICE 与 WMS 绑定,因此在其他进程中可以通过如下方式获取 WMS。
IBinder b = ServiceManager.getService(Context.WINDOW_SERVICE);
IWindowManager wm = IWindowManager.Stub.asInterface(b);
(4)main
/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java
初始化:
- 构造函数
/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java
- 初始化 WMP
- 初始化 Display
- 通知系统 WMS 初始化完成