Activity启动流程 基于android11
ActivityManagerServicestartActivity()ActivityTaskManagerServicestartActivity()startActivityAsUser()getActivityStartController() ...obtainStarter()ActivityStartControllerobtainStarter() ...execute()De
Activity
startActivity()
>startActivityForResult()
Instrumentation
execStartActivity()
ActivityTaskManager
getService()
//获取到的是 ActivityTaskManagerService 对象
ActivityTaskManagerService
startActivity()
>startActivityAsUser()
>>getActivityStartController()
获取到的是 ActivityStartController 对象
ActivityStartController
obtainStarter()
其中通过DefaultFactory创建了ActivityStarter对象,详见注释2
ActivityStarter
setIntent()
setReson
… //建造者模式, 众多属性赋值
execute()
1 //!!!关键执行方法
包含了activityInfo的赋值逻辑,详见注释1
>executeRequest()
>>startActivityUnchecked()
>>>startActivityInner()
RootWindowContainer
resumeFocusedStacksTopActivities()
ActivityStack
resumeTopActivityUncheckedLocked()
>resumeTopActivityInnerLocked()
ActivityStackSupervisor
startSpecificActivity()
>realStartActivityLocked()
>>clientTransaction.addCallback(LaunchActivityItem.obtain())
2 //此处将启动信息进行封装
>>goto:next
ClientLifecycleManager
scheduleTransaction()
ClientTransaction
schedule()
ApplicationThread
scheduleTransaction()
ClientTransactionHandler
scheduleTransaction()
ActivityThread
sendMessage()
>H.sendMessage()
3
TransactionExecutor
execute()
>executeCallbacks()
: goto:case1
>executeLifecycleState(transaction)
: goto:case2
__________case1:start
LaunchActivityItem
execute()
ActivityThread
handleLaunchActivity()
>performLaunchActivity()
//关键方法,生成了ContextImpl和Activity,并使其绑定
Instrumentation
callActivityOnCreate()
Activity
performCreate()
>onCreate()
//生命周期方法
case1:end
__________case2:start
TransactionExecutor
executeLifecycleState()
ResumeActivityItem
execute()
ActivityThread
handleResumeActivity()
>performResumeActivity()
Activity
performResume()
>goto:case3
>goto:case4
case2:end
__________case3:start
Activity
performRestart()
>performStart()
Instrumentation
callActivityOnStart()
Activity
onStart()
//生命周期方法
case3:end
__________case4:start
Instrumentation
callActivityOnResume()
Activity
onResume()
//生命周期方法
case4:end
注释1
activityInfo赋值
execute(){
...
//因为在建造者模式下,并没有给activityInfo赋值,所以此处为null
if (mRequest.activityInfo == null) {
mRequest.resolveActivity(mSupervisor);
}
...
}
Request为ActivityStarter的内部类
Request.resolveActivity(){
...
//从intent中收集信息,内部最终会调用 PackageManagerService.resolveIntent()方法,解析出对应的信息
resolveInfo = supervisor.resolveIntent(intent, resolvedType, userId,
0 /* matchFlags */,
computeResolveFilterUid(callingUid, realCallingUid, filterCallingUid));
...
// supervisor来源见下文
activityInfo = supervisor.resolveActivity(intent, resolveInfo, startFlags,profilerInfo);
...
}
探究 ActivityStarter对象 的 supervisor属性 的来历
-
supervisor属性在ActivityStarter对象创建时传入,且由DefaultFactory工厂创建
类:ActivityStarter.DefaultFactory public ActivityStarter obtain() { ActivityStarter starter = mStarterPool.acquire(); if (starter == null) { //在此构造方法中传入了mSupervisor对象 starter = new ActivityStarter(mController, mService, mSupervisor, mInterceptor); } return starter; }
-
DefaultFactory的mSupervisor属性在构造方法赋值
DefaultFactory(ActivityTaskManagerService service,ActivityStackSupervisor supervisor, ActivityStartInterceptor interceptor) { ... mSupervisor = supervisor; ... }
-
DefaultFactory对象创建发生在ActivityStartController构造方法中
ActivityStartController(ActivityTaskManagerService service) { this(service, service.mStackSupervisor, //service.mStackSupervisor即为mSupervisor new DefaultFactory(service, service.mStackSupervisor, new ActivityStartInterceptor(service, service.mStackSupervisor))); } @VisibleForTesting ActivityStartController(ActivityTaskManagerService service, ActivityStackSupervisor supervisor, Factory factory) { ... mFactory = factory; ... }
-
ActivityStartController的创建发生在ActivityTaskManagerService的initialize方法中
public void initialize(IntentFirewall intentFirewall, PendingIntentController intentController,Looper looper) { ... mStackSupervisor = createStackSupervisor(); ... mActivityStartController = new ActivityStartController(this); ... }
-
结合3和4,所有我们最开始要找的supervisor属性即是ActivityTaskManagerService的mStackSupervisor属性,它的赋值同样在initialize方法中
public void initialize(IntentFirewall intentFirewall, PendingIntentController intentController, Looper looper) { ... mStackSupervisor = createStackSupervisor(); ... } protected ActivityStackSupervisor createStackSupervisor() { final ActivityStackSupervisor supervisor = new ActivityStackSupervisor(this, mH.getLooper()); supervisor.initialize(); return supervisor; }
-
从而我们得出结论, ActivityStarter对象的supervisor属性,它的实例指向了ActivityStackSupervisor对象
注释2
ActivityStarter obtainStarter(Intent intent, String reason) {
return mFactory //mFactory 为 DefaultFactory对象,它在ActivityStartController构造方法中被传入
.obtain() //此处生成ActivityStarter对象
.setIntent(intent).setReason(reason); //建造者模式给ActivityStarter添加属性
}
更多推荐
所有评论(0)