Activity启动流程
Activity-->AMS
用户点击桌面图标Launcher(这个launch是系统桌面应用的一个类,Launcher也是一个进程)来启动根Activity
会执行Launcher的startActivitySafely-->super.startActivitySafely()
父类是BaseDraggingActivity的startActivitySafely-->startActivity(intent,options)
最终会执行到Activity的startActivity()-->startActivityForResult(intent,-1)
在startActivityForResult里面首先会判断mParent是否为空
if(mParent==null){
mInstrumentation.execStartActivity(this, mMainThread.getApplicationThread(), mToken,this,intent, requestCode, options);
}else{
mParent.startActivityFromChild(this, intent, requestCode, options);
}
execStartActivity--> ActivityTaskManager(ActivityManager).getService().startActivity(--)
IActivityTaskManager(有的版本是IActivityManager)-->startActivity
到这里为止是IPC通信也就是Binder的第一次通信
AMS-->ActivityThread
在服务端进程ActivityManagerService里的startActivity()接着处理binder通信过来的创建activity请求
startActivity-->startActivityAsUser()-->mActivityStartController.obtainStarter
创建了ActivityStarter通过建造者模式最终执行execute()
execute-->startActivityMayWait()(预处理)-->startActivity()-->startActivityUnchecked()
--> mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack,mStartActivity,mOptions);去检查任务栈的状态ActivityStackSupervisor->管理Activity的状态
接着targetSatck.resumeTopAcitvityLocked()去处理activity的状态-->mSupervisor.startSpecificActivityLocked会去判断
进程是否存在和activityThread是否存在,存在的话会直接启动activity 否的话回去通过mservice想Zygone请求孵化应用进程
接下来就是realStartActivityLocked-->mService.getLifecycleManager().scheduleTransaction()-->mClient.scheduleTransaction()通过事务去请求创建activity
IApplicationThread->scheduleTransaction()是一次IPC调用-->ActivityThread里面的内部类ApplicationThread本地去处理activity的创建以及生命周期的调用
ActivityThread启动Activity
ApplicationThread.scheduleTransaction()-->ActivityThread.this.scheduleTransaction()
scheduleTransaction里面通过H类来消息处理h就handler
ClientTransactionHandler#scheduleTransaction-->handler.message->mTransactionExecutor.execute()通过事务池执行,
LaunchActivityItem#excute()--》ActivityThread#handleLauchActivity()->performLanuchActivity()
->mInstrumentation#callActivityonCreate()->activity.performCreate()->oncreate()