ActivityThread#attach
//省略部分代码…
mInstrumentation = new Instrumentation();
ContextImpl context = ContextImpl.createAppContext(
this, getSystemContext().mPackageInfo);
//Application的实例创建
mInitialApplication = context.mPackageInfo.makeApplication(true, null);
//调用Application里面的生命周期方法onCreate
mInitialApplication.onCreate();
//省略部分代码…
这里面出现了 ContextImpl ,所以下面应该会跟 Application 扯上关系,所以进入到 makeApplication 方法中继续往下追踪,
LoadedApk#makeApplication
//省略部分代码…
Application app = null;
ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);
app = mActivityThread.mInstrumentation.newApplication(
cl, appClass, appContext);
appContext.setOuterContext(app);
//省略部分代码…
最终又进入到 Instrumentation#newApplication 方法里面
Instrumentation#newApplication
static public Application newApplication(Class<?> clazz, Context context)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
Application app = (Application)clazz.newInstance();
app.attach(context);
return app;
}
Application#attach
/**
- @hide
*/
/* package */
final void attach(Context context) {
attachBaseContext(context);
mLoaded