这片文章将详细分析WindowState中的各个关键成员变量及成员函数。
1、Session类对象mSession
每一个WindowState都有一个Session类成员变量,那么每一个窗口保存的都是同一个mSession吗?还是每一个窗口的mSession都不同呢?dump一下便知道了,dump日志告诉我上述两种情况都不是,事实上是每一个UI进程的所有窗口保存的是同一个Session,而每一个UI进程之间的Session又是不同的。Session顾名思义就是会话的意思,是ViewRootImpl用来调用WMS服务功能的东东,这个可以从Session类中的函数可以看出来。每一个UI进程在何时创建一个Session的呢?是在add第一个View时创建的,这点大家可以去研究下源码。Session类继承IWindowSession.Stub,可以知道WindowState中保存的是本地对象,而ViewRootImpl中 mWindowSession保存的是代理对象。
2、IWindow类对象mClient
mClient是一个代理对象,本地对象保存在ViewRootImpl中的mWindow中。WMS利用mClient来通知ViewRootImpl一些状态的改变等。mClient代表的是UI进程侧的一个窗口。
3、mOwnerUid
该变量保存的是UID,UID在Linux中是为多用户设计的,而在Android中赋予了新的使命--数据共享,android为每个应用几乎都分配了不同的UID,如果要实现两个程序的互访,可以定义相同的android:sharedUserId,并且签名相同便可互访。
WindowState笔记
时间: 2024-10-21 05:23:05