美文网首页
Activity 创建流程

Activity 创建流程

作者: 没有了遇见 | 来源:发表于2020-09-14 23:30 被阅读0次

    Activity启动流程图(红色为重要方法):


    image.png
    1. 第一步startActivity() 会调用Activity中的startActivity() 然后调用的 startActivityForResult()
    image.png

    2.Instrumentation 调用 mInstrumentation.execStartActivity() :执行应用程序发出的startActivity()调用 Instrumentation.ActivityResult ar =
    mInstrumentation.execStartActivity(
    this, mMainThread.getApplicationThread(), mToken, this,
    intent, requestCode, options);

    image.png

    - 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():

    image.png
    • 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
    1. --> (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.png

    10.-->(RootActivityContainer)resumeTopActivityUncheckedLocked()


    image.png

    11.-->(ActivityStack)targetStack.resumeTopActivityUncheckedLocked()


    image.png

    12.-->(ActivityStack)resumeTopActivityInnerLocked()

    image.png

    13.-->(ActivityStack)startSpecificActivityLocked()


    image.png

    14.-->(ActivityStackSupervisor)mStackSupervisor.realStartActivityLocked()


    image.png

    15.--> (StackSupervisor)mService.getLifecycleManager().scheduleTransaction(clientTransaction)


    image.png image.png
    1. 调用流程-->
      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

    相关文章

      网友评论

          本文标题:Activity 创建流程

          本文链接:https://www.haomeiwen.com/subject/cawzektx.html