一、源代码版本
源代码版本:Source for Android 30 (Android10.0+(R))
二、流程图
三、流程分析
Activity的启动由Intent触发,Intent可以分为显式Intent和隐式Intent。
首先,我们编写一个ActivityDemo,该工程下有两个Activity,分别为MainActivity和SecondActivity,还有两个布局文件,分别为activity_main.xml和activity_second.xml。
从入口方法startActivity()方法开始分析,startActivity()方法有好几种重载方法,但它们最终都会调用startActivityForResult()方法。
进入MainActivity#startActivity()方法后,在方法的末尾调用了startActivityForResult()方法。
接下来,我们进入Activity#startActivityForResult()方法。
startActivityForResult()方法才是真的调起Activity的入口方法,其中,mParent表示ActivityGroup,当mParent==null的时候,进入Instrumentation#execStartActivity()方法。Instrumentation是Android系统中启动Activity的一个实际操作类,它用来监控应用程序和系统的交互。
在try方法块中,调用了ActivityTaskManager.getService().startActivity()方法来启动Activity。
首先,进入ActivityTaskManager#getService()方法。
可以看出getService()方法中返回的是IActivityTask