ActivityManagerService服务请求WindowManagerService服务为一个Activity组件创建一个AppWindowToken对象的过程

AppWindowToken对象创建的过程: Activity组件在WindowManagerService服务和ActivityManagerService服务之间的连接是通过一个AppWindowToken对象来描述的。 AppWindowToken类是从WindowToken类继续下来的。WindowToken类也是用来标志一个窗口的,不过这个窗口类型除了是应用程序窗口,即Activity组件窗口之外, 还可以是其它的,例如,输入法窗口或者壁纸窗口类型等,而AppWindowToken类只是用来描述Activity组件窗口。

1、ActivityStack.startActivityLocked()
              ↓
2、WindowManagerService.addAppToken()
              ↓
3、new AppWindowToken()
              ↓
4、mTokenMap.put(token.asBinder(), atoken)

 

Session对象的创建过程 :应用程序进程在为它里面启动的第一个Activity组件的视图对象创建一个关联的ViewRoot对象的时候,就会向WindowManagerService服务请求返回一个类型为Session的Binder本地对象,这样应用程序进程就可以获得一个类型为Session的Binder代理对象,以后就可以通过这个Binder代理对象来和WindowManagerService服务进行通信了。

ActivityThread.handleResumeActivity()
              ↓
WindowManagerImpl.addView()
              ↓
WindowManagerGlobal.addView()
              ↓
new ViewRootImpl(view.getContext(), display)
              ↓
WindowManagerGlobal.getWindowSession()
              ↓
WindowManagerService.openSession()
              ↓
new Session(this, client, inputContext)  //创建一个类型为Session的Binder本地对象,并且将这个类型为Session的Binder本地对象返回给应用程序进程

 

WindowState对象的创建过程:每一个Activity组件窗口在WindowManagerService服务内部都有一个对应的WindowState对象,用来描述它的窗口状态

ActivityThread.handleResumeActivity()
              ↓
WindowManagerImpl.addView()
              ↓
WindowManagerGlobal.addView()
              ↓
new ViewRootImpl()
ViewRoot.setView()
              ↓
Session.addToDisplay()
              ↓
WindowManagerService.addWindow()
              ↓
new WindowState()
mWindowMap.put(client.asBinder(), win) //把这个windowState保存起来
WindowState.attach() //继续调用前面所创建的一个WindowState对象的成员函数attach来创建一个关联的SurfaceSession对象,以便可以用来和SurfaceFlinger服务通信
              ↓
Session.windowAddedLocked()
              ↓
new SurfaceSession()

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值