Androidのソースコードによると、このActivity.onCreate()
メソッドはsaveInstanceStateバンドルをアクティビティのフラグメントに転送します。具体的には、「android:fragments」キーを使用してパーセルをフェッチし、FragmentManager.restoreAllStates()
メソッドを使用してこのパーセルをフラグメントに転送します。このメソッド自体がすべてのフラグメントの状態を復元します。
このActivity.onRestoreInstanceState()
メソッドは、バンドルをアクティビティのウィンドウに転送します。ここでも、保存されたインスタンスから「android:viewHierarchyState」バンドルをフェッチし、Window.restoreHierarchyState()
メソッドを使用してウィンドウに転送します。
したがって、質問に答えるために、アクティビティでフラグメントが使用されていない場合、実際に呼び出しsuper.onCreate(null)
ても何も変わりません。ただし、ベストプラクティスとして、常に正確なsavedInstanceバンドルを転送することをお勧めします(何をしているのかわからない場合)。
編集:これは私が話したサンプルソースコードで、AOSP v17から取られたものです:
Activity.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);
}
}
}