记录Activity启动流程Android 11
一、StratActivity
引导:无论何种方式启动Activity,都会走到Activity.startActivity方法
1.Activity
startActivity--->startActivityForResult--->startActivityFromChild--->
2.Instrumentation
execStratActivity--->(通过跨进程通讯binder)--->
3.ATMS(ActivityTaskManagerService)
startActivity--->startActivityUser--->
//1处obtainStarter方法返回的是ActivityStarter对象,所以2处execute实则执行的是ActivityStarter.execute方法
4.ActivityStarter
execute--->executeRequest--->startActivityUnchecked--->startActivityInner--->
5.RootWindowContainer
resumeFocusedStaskTopActivity--->
6.ActivityStack
resumeTopActivityUncheckedLocked--->resumeTopActivityInnerLocked--->
7.ActivityStackSupervisor(先执行栈顶Activity.onPause方法,这部分在后面第二点)
startSpecificActivity--->(判断启动此Activty进程是否已经启动,已经启动则跳过8-16步新进程启动和新进程与AMS绑定步骤)
//此处判断进程已经创建则执行1走activity生命周期,不存在这执行2创建进程
8.ATMS
startProcessAsync--->
//此处ActivityManagerInternal为AMS内部类LocalService继承,所以实则走到了AMS内部类LocalService.startPocess方法
9.LocalService(ActivityManagerService内部类LocalService)
startProcess--->startProcessLocked--->
10.ProcessList
startProcessLocked--->startProcess--->
11.Process
start--->
12.ZygoteProcess
start--->startViaZygote--->zygoteSendArgsAndGetResult--->attemptUsapSendArgsAndGetResult(通过socket通讯发送消息给服务端)--->服务端通过反射条用--->
13.ActivityThread
main--->attach--->(通过跨进程通讯binder发送applicationThread到AMS进行型绑定)--->
14.AMS
attachApplication--->attachApplicationLocked--->
15.ATMS
attachApplication--->
16.RootWindowContainer
attachApplication--->startActivityForAttachedApplicationIfNeeded--->
//创建和绑定新进程后,此处又回到第7步判断进程已经启动后的执行步骤
17.ActivityStackSupervisor
realStartActivityLocked--->
//注意1处传入的对象为LaunchActivityItem,后面需要用到
18.ClientLifecycleManager
scheduleTransaction--->
19.ClientTransaction
schedule--->
//此处mClient为ActivityThread内部类ApplicationThread
20.ActivityThread
scheduleTransaction--->
//此处会具体执行父类的ClientTransactionHandler.scheduleTransaction
21.ClientTransactionHandler
scheduleTransaction--->sendMessage--->
//此处发送handler消息到ActivityThread.H中,记住传入的what为EXECUTE_TRANSACTION,H类中case中使用到
22.ActivityTread.H
//此处执行的case是上一步发送过来的EXECUTE_TRANSACTION--->
23.TransactionExecutor
execute--->executeCallbacks--->
//此处执行的execute具体实现应该为17步图片标注1中传入的类(LaunchActivityItem)中的execute方法,所以后面执行--->
24.LaunchActivityItem
execute--->
//此处的client也是ActivityThread(可查看此类,集成于ClientTransactionHandler)
25.ActivityThread
handleLaunchActivity--->performLaunchActivity--->
26.Intrumentation
callActivityOnCreate--->
27.Activity
perfromCreate--->onCreate
二、onPause
1~6--->
28.ActivityStack
startPausingLocked--->
//此处注意传入的是PauseActivityItem后面需要使用
18~23(23步中因为onPause传入的对象是PauseActivityItem,所以后面执行的是PauseActivityItem.execute)--->
29.PauseActivityItem
execute--->
30.ActivityThread
handlePauseActivity--->performPauseActivity--->performPauseActivityIfNeeded--->
31.Intrumentation
callActivityOnPause--->
32.Activity
performPause--->onPause
三、onStart
33.TransactionExecutor
//回到步骤23,execute方法中执行完executeCallback(onCreate)后执行方法
execute--->executeLifecycleState--->cycleToPath--->performLifecycleSequence--->
//图中1处计算返回执行到的步骤
34.ActivityThread
handleStartActivity--->
35.Activity
performStart--->
36.Intrumentation
callActivityOnStart--->
37.Activity
onStart
四、onResume
回到步骤33--->
38.ActivityThread
handleResumeActivity--->performResumeActivity
39.Activity
performResume--->
40.Intrumentation
callActivityOnResume--->
41.Activity
onResume
五、onStop
回到步骤38--->onResume执行完后--->
42.ActivityThread
handleResumeActivity--->
43.Activity内部类Ider
queueIdle--->
44.ATMS
activityIdle--->
45.ActivityStackSupervisor
activityIdleInternal--->processStoppingAndFinishingActivities--->
46.ActivityRecord
stopIfPossible--->
//注意这里出入的是StopActivityItem,后面需要用到
执行20~23--->
47.StopActivityItem
execute--->
48.ActivityThread
handleStopActivity--->performStopActivityInner--->callActivityOnStop--->
49.Activity
performStop--->
50.Intrumentation
callActivityOnStop--->
51.Activity
onStop