2015-10-13 47 views
1

我的應用程序中有三個活動。在多個活動中使用onSaveInstanceState

從第一個開始第二個,從第二個開始第三個。當我的應用程序的進程被系統殺死,我再次啓動它時,我看到只有最後一個活動活動正在創建。它似乎是唯一一個將Bundle對象作爲其onCreate方法的參數。

有兩件事情我很好奇:

  • 如果在堆棧的頂部的活動是唯一一個獲得其捆綁,爲什麼我的每一個活動,得到了所謂的回調(的onSaveInstanceState)就在他們的onStop()方法之前。

  • 如果我的一項活動只​​能保留原始狀態,那麼其他的呢?他們是否因爲系統決定殺死我的應用程序而失去了他們所有的狀態?我應該手動恢復它們嗎?對他們的看法呢? (通常觀點得到他們的狀態恢復,而不需要我把東西放到捆綁,如果我沒有記錯後恢復)

回答

0

當你創建一個新的活動的onStop被稱爲以前的活動,讓您保存在州!你以前的活動的onCreate將被調用,如果它被銷燬,所以不要擔心重新創建視圖。你確定應用程序被殺害?應用程序在丟失視圖時不會被殺死。只要不需要釋放內存,Android就會將其保留在內存中。

0

默認行爲是這樣(4.1.1測試):

  • 當你開始一個新的活動,以前的活動onSaveInstanceState被稱爲
  • 當系統殺死應用程序,國家活動回堆被保存
  • 當您重新啓動應用程序,正在顯示最後看到活動的onRestoreInstanceState被稱爲
  • 當您導航回來,從後面出棧的活動,他們每個人的狀態將重新存儲在調用onRestoreInstanceState時,通過從上面第一步獲得的包。

因此,問題的答案是:

  1. 所有活動都將被恢復,但不能一下子 - 看到最後一個是立即恢復,而當你瀏覽後面的人將被恢復。
  2. 所有簡單視圖(例如EditText)都會自動恢復其狀態。爲了做到這一點,你需要確保a)您沒有沒有電話覆蓋onSaveInstanceStateonRestoreInstanceStatesuper實現B)應還原的意見具有唯一的ID在視圖層次