根據Android源代碼,Activity.onCreate()
方法將saveInstanceState包轉發給活動的片段。更具體地說,它使用「android:fragments」鍵獲取一個parcelable,並使用FragmentManager.restoreAllStates()
方法將該parcelable轉發到片段,該方法本身可以恢復所有片段的狀態。
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);
}
}
}
我認爲這是不同的......當你的應用程序暫停了一段時間,如何你能恢復它..?如果你通過null – Pragnani 2013-02-27 15:39:39