参考 : 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()
方法
performLaunchActivity()
方法
onCreate()
和 onStart()
生命周期handleResumeActivity()
方法 ()
onResume()
生命周期ActivityThread 的 handleResumeActivity()
方法最终会调用 ViewRootImpl 的requestLayout()
方法
调用 ViewRootImpl 的 scheduleTraversals()
方法
调用 ViewRootImpl 的 performTraversals()
方法
调用 ViewRootImpl 的 performMeasure()
,performLayout()
, performDraw()
方法
简化版 :
startActivity(intent)
方法startActivity()
方法handleResumeActivity()
方法requestLayout()
方法performTraversals()
方法performMeasure()
,performLayout()
, performDraw()