参考:https://zhuanlan.zhihu.com/p/615272198
startActivity启动流程:
1、Activity类
startActivity(intent);
startActivityForResult()
2、Instrumentation类
execStartActivity()
3、IActivityTaskManager.aidl 类
startActivity
4、ActivityTaskManagerService 类
startActivity()
startActivityAsUser()
5、ActivityStarter类
execute()
executeRequest() - 实例化了 ActivityRecord
startActivityUnchecked()
startActivityInner() ->
6、RootWindowContainer类
resumeFocusedTasksTopActivities()
7、Task类
resumeTopActivityUncheckedLocked()
resumeTopActivityInnerLocked()
8、TaskFragment类
resumeTopActivity()
9、ActivityTaskSupervisor类
startSpecificActivity()
realStartActivityLocked() -> clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent)
10、ClientTransaction类的
schedule()
11、ActivityThread.ApplicationThread类
scheduleTransaction()
12、ClientTransactionHandler类
scheduleTransaction() ->sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
13、TransactionExecutor类的
execute()
executeCallbacks() -> 这里执行LaunchActivityItem的execute方法
executeLifecycleState() -> 执行生命周期
performLifecycleSequence()
mTransactionHandler.handleStartActivity 与 mTransactionHandler.handleResumeActivity,即调用了 ApplicationThread 的 handleStartActivity 与 handleResumeActivity 来执行 Activity 的 onStart 与 onResume 的生命周期。
14、LaunchActivityItem类(ResumeActivityItem、)
execute() -> 调用client.handleLaunchActivity就是ActivityThread 中 handleLaunchActivity
15、ActivityThread类的
handleLaunchActivity()
performLaunchActivity()
mInstrumentation.newActivity 创建Activity
mInstrumentation.callActivityOnCreate 执行生命周期
Instrumentation类
newActivity() -> activity.attach
callActivityOnCreate()
Activity类
attach() -> 主要初始化 PhoneWindow 的一些操作
performCreate()
onCreate() -> 声明周期的执行
startActivity简化流程:
Activity类startActivity方法
Instrumentation类execStartActivity方法
ActivityManagerService类startActivity方法
ClientTransactionHandler类scheduleTransaction方法
TransactionExecutor类execute()方法
ActivityThread类handleLaunchActivity方法
->performLaunchActivity方法(创建Activity),并且调用mInstrumentation.callActivityOnCreate
Instrumentation类callActivityOnCreate方法
Activity类performCreate方法
->onCreate() 这里回调onCreate方法,但是view还没真正显示出来。
时序图: