根据 Android 源代码,该Activity.onCreate()
方法将 saveInstanceState 包转发到活动的片段。更具体地说,它使用“android:fragments”键获取一个parcelable,并使用该FragmentManager.restoreAllStates()
方法将这个parcelable转发给片段,该方法本身会恢复所有片段的状态。
该Activity.onRestoreInstanceState()
方法将包转发到活动的窗口。它再次从保存的实例中获取“android:viewHierarchyState”包并使用该Window.restoreHierarchyState()
方法将其转发到窗口。
所以回答你的问题,如果你的活动不使用片段,那么确实调用super.onCreate(null)
不会改变任何东西。但作为最佳实践,我建议您始终转发确切的 savedInstance 包(除非您知道自己在做什么)。
编辑:这里是我谈到的示例源代码,取自 AOSP v17:
活动.java
protected void onCreate(Bundle savedInstanceState) {
// [... some content ellipsed for readability purposes]
if (savedInstanceState != null) {
Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
? mLastNonConfigurationInstances.fragments : null);
}
mFragments.dispatchCreate();
getApplication().dispatchActivityCreated(this, savedInstanceState);
mCalled = true;
}
// [...]
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}