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属性 的来历

  1. 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;
    }
    
  2. DefaultFactory的mSupervisor属性在构造方法赋值

    DefaultFactory(ActivityTaskManagerService service,ActivityStackSupervisor supervisor, ActivityStartInterceptor interceptor) {
             ...
             mSupervisor = supervisor;
             ...
    }
    
  3. 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;
         ...
     }
    
  4. ActivityStartController的创建发生在ActivityTaskManagerService的initialize方法中

    public void initialize(IntentFirewall intentFirewall, PendingIntentController intentController,Looper looper) {
    	...
    	mStackSupervisor = createStackSupervisor();
        ...
        mActivityStartController = new ActivityStartController(this);
        ...
    }
    
  5. 结合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;
    }
    
  6. 从而我们得出结论, ActivityStarter对象的supervisor属性,它的实例指向了ActivityStackSupervisor对象

注释2

ActivityStarter obtainStarter(Intent intent, String reason) {
    return mFactory  //mFactory 为 DefaultFactory对象,它在ActivityStartController构造方法中被传入
    	.obtain()    //此处生成ActivityStarter对象
    	.setIntent(intent).setReason(reason);   //建造者模式给ActivityStarter添加属性
}

  1. 其返回值用于 checkStartActivityResult (Instrumentation) 查验结果,例如activity未在清单文件中注册等 ↩︎

  2. 此处会整合信息存入LaunchActivityItem,并添加进入 ClientTransactionmActivityCallbacks 数组 ↩︎

  3. H类为ActivityThread的内部类,为Handler实例
    发送的message的标识: msg.what = ActivityThread.H.EXECUTE_TRANSACTION ↩︎

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐