Android Window 浅析 之二

本文详细介绍了Android系统中WindowManagerService(WMS)的启动过程,以及WMS与WindowManager之间的通信机制。重点讨论了WindowToken、WindowState和DisplayContent在Window添加过程中的角色,通过AIDL接口IWindowSession和IWindow在不同进程间的交互,揭示了ViewRootImpl作为通信桥梁的角色和其内部成员变量的重要性。
摘要由CSDN通过智能技术生成

Window的添加过程的WMS部分,将addWindow方法分为了3个部分来进行讲解,从addWindow方法我们得知WMS有3个重要的类分别是WindowToken、WindowState和DisplayContent

启动过程

1.1 WindowManagerService 的诞生
1.1.1 在 SystemServer 中的创建
WMS 是在 SystemServer 进程中启动的,SystemServer 进程是 Android 系统启动的时候初始化的,我们首先来看一下 SystemServer 的入口函数 main()

 

public final class SystemServer {
    /**
     * The main entry point from zygote.
     */
    public static void main(String[] args) {
        new SystemServer().run();
    }
}

分析run方法

 

 private void run() {

        ......
         mSystemServiceManager = new SystemServiceManager(mSystemContext);  // 代码 1

        // Start services.
        try {
            traceBeginAndSlog("StartServices");
            startBootstrapServices();                              // 代码 2
            startCoreServices();                                   // 代码 3
            startOtherServices();                                  // 代码 4
            SystemServerInitThreadPool.shutdown();
        } catch (Throwable ex) {
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
        } finally {
            traceEnd();
        }
    }

代码1处,创建了一个 SystemServiceManager 对象
代码2处,调用 startBootstrapServices() 启动 ActivityManagerService、PackageManagerService 等服务进程
代码3处,调用 startCoreServices() 启动BatteryService、WebViewUpdateService 等服务进程
代码4处,调用 startOtherServices() 启动 WindowManagerService、InputManagerService 等服务进程

二. WMS 与 WindowManager 的通信

在上篇文章 初步理解 Window 体系 中,我们最后分析到了 ViewRootImpl,ViewRootImpl 是连接 WindowManager 和 WMS 的桥梁,自然他们之间的通信也是通过 ViewRootImpl 完成的。

2.1 ViewRootImpl 的成员变量

在 ViewRootImpl 中有两个个非常重要的成员变量:mWindowSession 和 mWindow,这两个变量都是用于 ViewRootImpl 和 WMS 通信使用的

public final class ViewRootImpl implements ViewParent,
View.AttachInfo.Callbacks, ThreadedRenderer.DrawCallbacks {
......
final IWindowSession mWindowSession;
final W mWindow;<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值