关于Activity的加载流程

  从ThreadActivity类的handleLaunchActivity方法开始,先调用performLaunchActivity,在这个方法中调用了Activity的attach方法。attach方法中对window进行了初始化,具体类型是PhoneWindow。创建完window后,activity会实现对应的callback方法来监听window相关的事件。在PhoneWindow创建完后会初始化其中的一些变量,例如WindowManager(也就是PhoneWindow中新建了一个WindowManager,其类型是WindowManagerImpl,而WindowManagerImpl中保存了从WindowManagerService获取的windowManagerService)。
  如果上面performLaunchActivity方法的返回值不为空,会执行handleResumeActivity方法。在这个过方法中会调用到PhoneWindow的getDecor方法,用于新建DecorView。新建完DecorView后会调用WindowManager的addView方法(实际上是WindowManagerImpl的addView)将DecorView添加到window中。具体过程是这样的:

1.调用WindowManagerGlobal的addView方法。
2.创建ViewRootImpl对象。
3.将DecorView,ViewRootImpl,layoutparams保存起来。
4.调用ViewRootImpl的setView方法,绑定DecorView。
5.setView中调用requestLayout(scheduleTraversals,最终会走到performTraversals)来开始对整个View的测量及绘制。
6.requestLayout之后会调用mWindowSession(在WindowManagerGlobal中初始化)的addToDisplay方法,该方法是一个IPC方法,最终将window添加到屏幕上。

  Activity中的setContentView实际调用的是PhoneWindow中的setContentView方法。大概就是把xml文件中的View填充到mContentParent中去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值