//省略部分代码
…
…
final ActivityClientRecord r = mActivities.get(token);
//省略部分代码
…
…
//调用Activity的performResume方法
r.activity.performResume(r.startsNotResumed, reason);
return r;
}
final void performResume(boolean followedByPause, String reason) {
//省略部分代码
…
…
//调用Instrumentation的callActivityOnResume方法
mInstrumentation.callActivityOnResume(this);
//省略部分代码
…
…
}
public void callActivityOnResume(Activity activity) {
activity.mResumed = true;
//调用Activity的onResume
activity.onResume();
if (mActivityMonitors != null) {
synchronized (mSync) {
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
am.match(activity, activity, activity.getIntent());
}
}
}
}
上面我们跟了一下performResumeActivity的源码,发现最后调用了Activity的onResume,由此我们可以知道在注释一的时候,Activity的onResume方法其实已经执行完成了,但是我们的界面绘制还没有开始呢,印证了我们开头说的。
2.下面我们来看看注释2这个wm到底是个什么东西呢,看看它的具体实现类是什么。
//Activity的getWindowManager方法
public WindowManager getWindowManager() {
return mWindowManager;
}
//mWindowManager是在Activity的attach方法中被创建的
//这个方法是handleResumeActivity前执行的分析启动流程的时候我们会说到
final void attach(Context context, ActivityThread aThread,
Instrumentation instr, IBinder token, int ident,
Application application, Intent intent, ActivityInfo info,
CharSequence title, Activity parent, String id,
NonConfigurationInstances lastNonConfigurationInstances,
Configuration config, String referrer, IVoiceInteractor voiceInteractor,
Window window) {
//调用setWindowManager方法
mWindow.setWindowManager(
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
mToken, mComponent.flattenToString(),
(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
if (mParent != null) {
mWindow.setContainer(