Activiity跳转startActivity源码分析Activity启动流程(上)

1.Activity的startActivity
Activiity跳转startActivity源码分析Activity启动流程(上)_第1张图片
2.也是调用了Activity的startActivityForResult
Activiity跳转startActivity源码分析Activity启动流程(上)_第2张图片
3.实际还是startActivityForResult 带option的方法,只不过null传过去的
Activiity跳转startActivity源码分析Activity启动流程(上)_第3张图片
4.接着调用了 Instrumentation的execStartActivity方法
Activiity跳转startActivity源码分析Activity启动流程(上)_第4张图片
5.然后是IActivityManager的startActivity
Activiity跳转startActivity源码分析Activity启动流程(上)_第5张图片6.IActivityManager 是AMS 的IBinder 实现是在AMS中,最后走的是ActivityStartControl的链式调用
Activiity跳转startActivity源码分析Activity启动流程(上)_第6张图片可以看到返回值是ActivityStarter
Activiity跳转startActivity源码分析Activity启动流程(上)_第7张图片看看最终它的execute()方法:你会发现无论是startActivityMayWait还是startActivity,最终都会调用的是
Activiity跳转startActivity源码分析Activity启动流程(上)_第8张图片ActivityStarter 的startActivityUnchecked
Activiity跳转startActivity源码分析Activity启动流程(上)_第9张图片

然后会调用ActivityStackSupervisor的resumeFocusedstackTopActivityLocked()
Activiity跳转startActivity源码分析Activity启动流程(上)_第10张图片然后调用ActivityStack的resumeTopActivityUncheckedLocked方法

Activiity跳转startActivity源码分析Activity启动流程(上)_第11张图片
ActivityStack 调用自己的resumeTopActivityInnerLocked方法
Activiity跳转startActivity源码分析Activity启动流程(上)_第12张图片
然后就是回调 ActivityStackSupervisor的startSpecificActivityLocked
Activiity跳转startActivity源码分析Activity启动流程(上)_第13张图片

总结:

接下来转折点来了:
分为两种情况,一种是app已经启动,只是app内部activity跳转走 realStartActivityLocked方法,否则就拉起一个新的app,像从桌面点击一个app,就属于这种情况走的就是AMS的 startProcessLocked

Activiity跳转startActivity源码分析Activity启动流程(上)_第14张图片我们先看第一种情况:realStartActivityLocked,从android9.0之后由lifeCycleManager来统一处理
Activiity跳转startActivity源码分析Activity启动流程(上)_第15张图片它会调用ClientTransaction的schedule方法
Activiity跳转startActivity源码分析Activity启动流程(上)_第16张图片IapplicationThread的shechuleTranslaction()
Activiity跳转startActivity源码分析Activity启动流程(上)_第17张图片其实是ActivityThread.Appl

Activiity跳转startActivity源码分析Activity启动流程(上)_第18张图片

你可能感兴趣的:(源码解析,android)