&& mVoiceInteractor == null) {
return null;
}
NonConfigurationInstances nci = new NonConfigurationInstances();
nci.activity = activity;
nci.children = children;
nci.fragments = fragments;
nci.loaders = loaders;
if (mVoiceInteractor != null) {
mVoiceInteractor.retainInstance();
nci.voiceInteractor = mVoiceInteractor;
}
return nci;
}
retainNonConfigurationInstances 中调用了 onRetainNonConfigurationInstance() 。 到这儿,知道了 onRetainNonConfigurationInstance() 是怎么调用的了。
回头再看看 handleRelaunchActivityInner 中最后调用了 handleLaunchActivity ,熟悉Activity 启动流程的应该知道 handleLaunchActivity 是启动 Activity 的重要步骤
private void handleRelaunchActivityInner(ActivityClientRecord r, int configChanges,
List pendingResults, List pendingIntents,
PendingTransactionActions pendingActions, boolean startsNotResumed,
Configuration overrideConfig, String reason) {
…
// 注意第三个参数为 true
handleDestroyActivity(r.token, false, configChanges, true, reason);
…
handleLaunchActivity(r, pendingActions, customIntent);
}
handleLaunchActivity
@Override
public Activity handleLaunchActivity(ActivityClientRecord r,
PendingTransactionActions pendingActions, Intent customIntent) {
final Activity a = performLaunchActivity(r, customIntent);
}
performLaunchActivity 启动 Activity 的核心实现
/** Core implementation of activity launch. */
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
Activity activity = null;
try {
java.lang.ClassLoader cl = appContext.getClassLoader();
activity = mI