Activity启动流程图(红色为重要方法):
image.png
- 第一步startActivity() 会调用Activity中的startActivity() 然后调用的 startActivityForResult()
2.Instrumentation 调用 mInstrumentation.execStartActivity() :执行应用程序发出的startActivity()调用 Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode, options);
- Instrumentation(mInstrumentation):翻译过来是可以把测试包和目标测试应用加载到同一个进程中运行)
- 原文: Base class for implementing application instrumentation code. When running with instrumentation turned on, this class will be instantiated for you before any of the application code, allowing you to monitor all of the interaction the system has with the application. An Instrumentation implementation is described to the system through an AndroidManifest.xml's <instrumentation> tag.
3: mInstrumentation.execStartActivity() -->ActivityTaskManager.getService()
.startActivity() 获取ActivityTaskManagerService() --->执行startActivityAsUser():
- ActivityTaskManagerService:
System service for managing activities and their containers (task, stacks, displays,... )
-翻译:用于管理活动及其容器(任务、堆栈、显示等)的系统服务。
4.--> startActivityAsUser()
image.png
5.getActivityStartController().obtainStarter(intent, "startActivityAsUser") 获取ActivityStarter (用于解释如何启动活动的控制器。) -->然后执行exexute() -->mayWait=true -->startActivityMayWait()
image.png image.png
5.startActivityMayWait() -->startActivity()
image.png- --> (ActivityStarter)mLastStartActivityResult = startActivity(caller, intent, ephemeralIntent, resolvedType,
aInfo, rInfo, voiceSession, voiceInteractor, resultTo, resultWho, requestCode,
callingPid, callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
options, ignoreTargetSecurity, componentSpecified, mLastStartActivityRecord,
inTask, allowPendingRemoteAnimationRegistryLookup, originatingPendingIntent,
allowBackgroundActivityStart);
- ActivityRecord: activity 的信息类封装的activity的数据
7.打开Activity检测是否选中-->(ActivityStarter) result = startActivityUnchecked(r, sourceRecord, voiceSession, voiceInteractor,
startFlags, doResume, options, inTask, outActivity, restrictedBgActivity) Note: This method should only be called from {@link startActivity}.
image.png
8.--> (RootActivityContainer)mRootActivityContainer.resumeFocusedStacksTopActivities();
image.png
9.-->(RootActivityContainer)targetStack.resumeFocusedStacksTopActivities()
image.png10.-->(RootActivityContainer)resumeTopActivityUncheckedLocked()
image.png
11.-->(ActivityStack)targetStack.resumeTopActivityUncheckedLocked()
image.png
12.-->(ActivityStack)resumeTopActivityInnerLocked()
image.png13.-->(ActivityStack)startSpecificActivityLocked()
image.png
14.-->(ActivityStackSupervisor)mStackSupervisor.realStartActivityLocked()
image.png
15.--> (StackSupervisor)mService.getLifecycleManager().scheduleTransaction(clientTransaction)
image.png image.png
- 调用流程-->
mService.getLifecycleManager().scheduleTransaction(clientTransaction);clientTransaction 设置的LaunchActivityItem---> 会执行LauchActivityIyem的execute()方法,然后内部的ClientTransactionHandler 调用--> client.handleLaunchActivity(r, pendingActions, null /* customIntent */);--->ClientTransactionHandler 的实现类ActivityThread 执行-->handleLaunchActivity() 然后调用-->performLaunchActivity()方法 接着执行--> (Instrumentation加载器) mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);-->然后调用Activity的activity.performCreate()-->然后执行onCreate()方法
- A image.png
- image.png
- B image.png
- C image.png
- D image.png
网友评论