创建窗口相关的IPC对象
- W类:token
- AmS:HistoryRecord //AmS内部为运行每一个Activiy创建的一个Binder对象,客户端的Activity可以通过该Binder对象通知AmS当前运行的Activity的状态
Activity中的mToken
- mToken(Binder)变量指向HistoryRecord
Winow中的mAppToken
- 它是AmS在远程为每一个Activity创建的HistoryRecord的引用
- 如果mAppToken为空,则代表Window 不属于某个Activity(Window 不一定只对应一个Activity),否则mAppToken的值与Activity中的mToken值相同
WindowManager.LayoutParams中的token
token的意义正是指定该窗口对应的Binder对象,以便WmS通过该Binder对象对该窗口进行IPC调用
- 如果创建的窗口是应用窗口,token的值和Window中mAppToken值相同。
- 如果创建的窗口为子窗口,token为其父窗口的W对象。
- 如果创建的窗口是系统窗口,那么,token值为空。
View 中的token
- ViewRoot ( mAttachInfo )
- 每一个窗口对应一个ViewRoot对象
- mAttachInfo在ViewRoot构造时创建
- 该变量的类型和View对象中的mAttachInfo相同
- View ( mAttachInfo )
- 当该View对象被真正作为某个窗口W类的内部View时,该变量就会被赋值为ViewRoot 中的mAttachInfo。(所有的View内部都会被指向同一个mAttachInfo)
- mAttachInfo变量构成
- mWindowToken:该窗口对应的W对象
- mPanelParentWindowToken:如果该窗口是子窗口,那么该变量即为父窗口中的W对象。该变量和mWindowToken是互斥的,mWindowToken如果不为空,则意味着该窗口没有父窗口
- mWindow:相当于IWindow对象。可以通过IWindow.asBinder()获得mWindowToken