performLaunchActivity主要负责完成Activity对象的创建和启动过程,ActivityThread通过handleResumeActivity方法来调用被启动Activity的onResume这一声明周期
performLaunchActivity主要负责完成Activity对象的创建和启动过程,ActivityThread通过handleResumeActivity方法来调用被启动Activity的onResume这一声明周期。这里不关注Activity的启动。
主要做了5件事情
从ActivityClientRecord中获取待启动的Activity的组件信息
| 1 | ActivityInfo aInfo = r.activityInfo; | 
通过Instrumentation的newActivity方法使用类加载器创建Activity对象
| 1 | Activity activity = null; | 
其中Instrumentation的newActivity实现为,通过类加载器创建Activity对象。
| 1 | /** | 
通过LoadedApk的makeApplication方法尝试创建Application对象
performLaunchActivity.java调用makeApplication方法尝试创建Application
| 1 | try { | 
makeApplication的实现可以看出:
- 如果Application已经被创建过,则不会重复创建,意味着一个应用只有一个application对象
- Application对象的创建也是通过Instrumentation来完成的,这个过程和Activity对象的创建一样,通过类加载器来实现。
- Application创建完毕后,系统通过Instrumentation的callApplicationOnCreate来调用Application的onCreate方法。
| 1 | public Application makeApplication(boolean forceDefaultAppClass, | 
创建ContextImpl对象并通过Activity的attach方法来完成一些重要的数据的初始化
| 1 | if (activity != null) { | 
ContextImpl是一个很重要的数据结构,是Context的具体实现,Context中的大部分逻辑都是由ContextImpl来完成的。
- ContextImpl是通过Activity的attach方法和Activity建立关联。
- attach方法还会完成window的创建并建立自己和Window的关联。这样Window的外部输入事件就可以将事件传递给Activity。
| 1 | final void attach(Context context, ActivityThread aThread, | 
调用Activity的onCreate方法
mInstrumentation.callActivityOnCreate(activity, r.state),此后Activity的onCreate已经被调用,Activity至此完成整个创建流程。
| 1 | if (r.isPersistable()) { |