Activity启动(startActivity)源码流程图 - API 33 - 13版本

参考: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还没真正显示出来。

时序图:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王宁-Android

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值