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()) { |