Android 12 Activity启动流程

Android 12 Activity启动过程

参考文献:
startActivity启动过程分析
Activity启动流程(Android 12)

概述

Activity启动发起后,是通过Binder最终交由system进程中的AMS来完成。

一、启动流程

frameworks/base/core/java/android/app/Activity.java
frameworks/base/core/java/android/app/Instrumentation.java
frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
frameworks/base/services/core/java/com/android/server/wm/Task.java
frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
frameworks/base/services/core/java/com/android/server/wm/ClientLifecycleManager.java
frameworks/base/core/java/android/app/servertransaction/ClientTransaction.java
frameworks/base/core/java/android/app/ActivityThread.java
frameworks/base/core/java/android/app/ClientTransactionHandler.java
frameworks/base/core/java/android/app/servertransaction/TransactionExecutor.java
frameworks/base/core/java/android/app/servertransaction/LaunchActivityItem.java
frameworks/base/core/java/android/app/Instrumentation.java
frameworks/base/core/java/android/app/Activity.java
frameworks/base/core/java/android/app/servertransaction/TransactionExecutorHelper.java
#Activity.java
├──startActivity(Intent intent)
   └──startActivity(Intent intent, @Nullable Bundle options)
      └──startActivityForResult(@RequiresPermission Intent intent, int requestCode,@Nullable Bundle options)
         └──mInstrumentation.execStartActivity(this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode, options);
         #Instrumentation.java
         ├──execStartActivity(Context who, IBinder contextThread, IBinder token, Activity target,Intent intent, int requestCode, Bundle options)
            └──int result = ActivityTaskManager.getService().startActivity(whoThread,who.getOpPackageName(), who.getAttributionTag(), intent,intent.resolveTypeIfNeeded(who.getContentResolver()), token,target != null ? target.mEmbeddedID : null, requestCode, 0, null, options);
            #ActivityTaskManagerService.java
            ├──startActivity(IApplicationThread caller, String callingPackage,String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,Bundle bOptions)
               └──startActivityAsUser(IApplicationThread caller, String callingPackage,@Nullable String callingFeatureId, Intent intent, String resolvedType,IBinder resultTo, String resultWho, int requestCode, int startFlags,ProfilerInfo profilerInfo, Bundle bOptions, int userId, boolean validateIncomingUser)
                  └──return getActivityStartController().obtainStarter(intent, "startActivityAsUser")
                  |             .setCaller(caller)
                  |             .setCallingPackage(callingPackage)
                  |             .setCallingFeatureId(callingFeatureId)
                  |             .setResolvedType(resolvedType)
                  |             .setResultTo(resultTo)
                  |             .setResultWho(resultWho)
                  |             .setRequestCode(requestCode)
                  |             .setStartFlags(startFlags)
                  |             .setProfilerInfo(profilerInfo)
                  |             .setActivityOptions(bOptions)
                  |             .setUserId(userId)
                  |             .execute();
                  #ActivityStarter.java
                  ├──execute()
                     └──res = executeRequest(mRequest);
                        └──executeRequest(Request request)
                            └──mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask,restrictedBgActivity, intentGrants);
                               └──result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,startFlags, doResume, options, inTask, restrictedBgActivity, intentGrants);
                                  └──mRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch);
                                  #Task.java
                                  ├──resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options,boolean deferPause)
                                     └──someActivityResumed = resumeTopActivityInnerLocked(prev, options, deferPause);
                                     #ActivityTaskSupervisor.java
                                     ├──startSpecificActivity(ActivityRecord r, boolean andResume, boolean checkConfig)
                                        └──realStartActivityLocked(r, wpc, andResume, checkConfig);
                                           └──mService.getLifecycleManager().scheduleTransaction(clientTransaction);
                                           #ClientLifecycleManager.java
                                           ├──scheduleTransaction(ClientTransaction transaction) throws RemoteException
                                              └──transaction.schedule();
                                              #ClientTransaction.java
                                              ├──schedule() throws RemoteException
                                                 └──mClient.scheduleTransaction(this);
                                                 #ActivityThread.java
                                                 ├──scheduleTransaction(ClientTransaction transaction)
                                                    └──sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
                                                       └──handleMessage(Message msg)
                                                          └──case EXECUTE_TRANSACTION:
                                                          └──mTransactionExecutor.execute(transaction);
                                                          #TransactionExecutor.java
                                                          ├──execute(ClientTransaction transaction)
                                                             └──executeCallbacks(transaction);//执行LaunchActivityItem
                                                             |  └──item.execute(mTransactionHandler, token, mPendingActions);
                                                             |   #LaunchActivityItem.java
                                                             |   ├──execute(ClientTransactionHandler client, IBinder token,PendingTransactionActions pendingActions)
                                                             |      └──client.handleLaunchActivity(r, pendingActions, null /* customIntent */);
                                                             |      #ActivityThread.java
                                                             |      ├──handleLaunchActivity(ActivityClientRecord r,PendingTransactionActions pendingActions, Intent customIntent)
                                                             |         └──final Activity a = performLaunchActivity(r, customIntent);
                                                             |            └──if (r.isPersistable())//通过Instrumentation调用onCreate方法
                                                             |                  mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
                                                             |            └──ielse
                                                             |                  mInstrumentation.callActivityOnCreate(activity, r.state);
                                                             |                  #Instrumentation.java
                                                             |                  ├──callActivityOnCreate(Activity activity, Bundle icicle)
                                                             |                     └──activity.performCreate(icicle);
                                                             |                      #Activity.java
                                                             |                      ├──performCreate(Bundle icicle)
                                                             |                            └──if (persistentState != null)
                                                             |                                  onCreate(icicle, persistentState);
                                                             |                            └──else
                                                             |                                  onCreate(icicle);
                                                             └──executeLifecycleState(transaction);//执行ResumeActivityItem
                                                                 └──cycleToPath(r, lifecycleItem.getTargetState(), true /* excludeLastState */, transaction);
                                                                 |  └──final IntArray path = mHelper.getLifecyclePath(start, finish, excludeLastState);
                                                                 |  └──performLifecycleSequence(r, path, transaction);
                                                                 └──lifecycleItem.execute(mTransactionHandler, token, mPendingActions);
                                                          
                                                    
                                     
   

1.系统进程

1.1#startActivity

<-Activity.java>

public void star
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值