记录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

发布于 2021-06-21 18:05