参考 : https://juejin.cn/post/6844903897748733966
流程如下 :
- Activity 对象的 startActivity(intent) 方法
- Activity 对象的 startActivityForResult(intent) 方法
- 调用 mInstrumentation.execStartActivity()
- 调用 ActivityManager.getService().startActivity() 方法, 此中 ActivityManager.getService() 返回的是 ActivityManagerService (AMS) 在应用历程的当地署理。
- 调用 AMS 的 startActivity() 方法
- 调用 ActivityStarter 的 startActivity() 方法
- 调用 ApplicationThread 的 scheduleLaunchActivity() 方法, 该方法中发送一个 H.LAUNCH_ACTIVITY 消息
- ActivityThread 的 Handler 的 handleMessage() 方法处理惩罚 H.LAUNCH_ACTIVITY 消息, 调用 handleLaunchActivity() 方法
- 调用 ActivityThread 的 performLaunchActivity() 方法
- 创建 Activity 实例
- 实行 onCreate() 和 onStart() 生命周期
- 调用 ActivityThread 的 handleResumeActivity() 方法 ()
- 实行 onResume() 生命周期
- 为 WindowManager 添加 DecorView
- ActivityThread 的 handleResumeActivity() 方法终极会调用 ViewRootImpl 的requestLayout() 方法
- 调用 ViewRootImpl 的 scheduleTraversals() 方法
- 调用 ViewRootImpl 的 performTraversals() 方法
- 调用 ViewRootImpl 的 performMeasure(),performLayout(), performDraw() 方法
简化版 :
- Activity 对象的 startActivity(intent) 方法
- 调用 ActivityManagerService (AMS) 的 startActivity() 方法
- ActivityThread 的 handleResumeActivity() 方法
- ViewRootImpl 的 requestLayout() 方法
- ViewRootImpl 的 performTraversals() 方法
- ViewRootImpl 的 performMeasure(),performLayout(), performDraw()
|