参考 : 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 的
-
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()
网友评论