1.Activity的startActivity
2.也是调用了Activity的startActivityForResult
3.实际还是startActivityForResult 带option的方法,只不过null传过去的
4.接着调用了 Instrumentation的execStartActivity方法
5.然后是IActivityManager的startActivity
6.IActivityManager 是AMS 的IBinder 实现是在AMS中,最后走的是ActivityStartControl的链式调用
可以看到返回值是ActivityStarter
看看最终它的execute()方法:你会发现无论是startActivityMayWait还是startActivity,最终都会调用的是
ActivityStarter 的startActivityUnchecked
然后会调用ActivityStackSupervisor的resumeFocusedstackTopActivityLocked()
然后调用ActivityStack的resumeTopActivityUncheckedLocked方法
ActivityStack 调用自己的resumeTopActivityInnerLocked方法
然后就是回调 ActivityStackSupervisor的startSpecificActivityLocked
总结:
接下来转折点来了:
分为两种情况,一种是app已经启动,只是app内部activity跳转走 realStartActivityLocked方法,否则就拉起一个新的app,像从桌面点击一个app,就属于这种情况走的就是AMS的 startProcessLocked
我们先看第一种情况:realStartActivityLocked,从android9.0之后由lifeCycleManager来统一处理
它会调用ClientTransaction的schedule方法
IapplicationThread的shechuleTranslaction()
其实是ActivityThread.Appl