token(Bundle)的各个含义(笔记)

来源:互联网 发布:ubuntu安装分区格式 编辑:程序博客网 时间:2024/06/05 22:30
创建窗口相关的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
0 0