其他分享
首页 > 其他分享> > Android-AMS(三)-startActivity流程分析

Android-AMS(三)-startActivity流程分析

作者:互联网

execStartActivity的代码如下,应用程序在调用startActivity时都会走到这里,这里就会调用AMS的startActivityAsUser()方法启动Activity

 

AMS的startActivityAsUser()会调用到ActivityStarter.startActivityMayWait().   在AMS里面。其实Activity的启动是在ActivityStarter里面完成的。

 

 

startActivityMayWait()很长,我们找到关键部分,代码如下

 

 跟踪startActivityLocked()。我们发现它调用了startActivity(),代码如下:

 

 这里的startActivity()有重载,最终会走到这个startActivity()  这里调用了startActivityUnchecked(),代码如下:

 

 跟进startActivityUnchecked()里面,其实到这里才开始真正意义上的启动一个Activity.代码如下,启动一个Activity主要的做了三件事:

 

 跟resumeFocusedStackTopActivityLocked()发现期调用了resumeTopActivityUncheckedLocked(),继续跟踪该方法。发现调用了resumeTopActivityInnerLocked(),还是跟。发现其调用了mStackSupervisor.startSpecificActivityLocked()。跟到这里。代码如下:

 

 这里开始准备调用Zygote去创建新进程了,创建进程的流程,这里不在跟踪,有兴趣的可以自行了解。如果想看这一块的内容,请移步到Android 进程创建流程分析跟Android系统启动流程分析。这里不在做过多介绍。我们移步到进程创建之后的流程里。这里我们用时序图做一下简要交代,调用Activity最终会调用到scheduledLaunchActivity()。时序图如下:

 

上图第九步后面的流程。由于时间关系。不在跟踪,我已经整理成xmind文档,有兴趣了解的可以自行跟踪。xmind文档如下:

 

 

 

 

 

标签:调用,这里,startActivity,Activity,进程,Android,AMS
来源: https://www.cnblogs.com/gwm-Android/p/16178552.html