2012-07-19 38 views
1

我有一個只支持縱向模式的應用程序。我通過使用序列所有我的論點,路過意圖的手段 - intent.putExtra()螞蟻那麼onCreate() - getIntent().getExtras().getX(MY_PARAM_NAME) ......使用savedInstanceState和onSaveInstanceState很重要嗎?

這樣,即使在系統關閉虛擬機,因爲與其他的東西崩潰。由於序列化,這些活動似乎再次以正確的參數開始。

所以問題是,在我的情況是保存實例狀態嗎?它似乎沒有它運作良好...沒有得到任何問題。但也許我錯過了一些東西,或者沒有足夠的測試。

回答

4

正如您已經指出的那樣,如果您的Activity被殺死(即由於資源不足),當它被重新創建時,它會通過啓動它的原始Intent。在你的情況下,這意味着你得到你的序列化對象。

覆蓋onSaveInstanceState對於您在執行Activity(尚未保存在其他位置)過程中發生更改的情況非常重要,因爲如果該問題被終止,您想維護它。

例如,存儲在您的Activity成員變量是危險的,當Activity被殺害和重建,除非您將它們保存在onSaveInstanceStateBundle,然後從Bundle傳遞給onCreate恢復它們。

更新:測試實施該方法的必要性的一個好方法是強制Android在您離開它們後儘快殺死您的活動。然後,運行你的應用程序,看看是否有任何問題。您可以在模擬器上使用Dev Tools App或在ICS中使用設置 - >開發人員選項,並選中「不要保留活動」。

+0

很好的回答,謝謝。因爲我所有的數據都是從參數中派生出來的,所以我現在不用擔心它。但很高興知道... – Ixx 2012-07-19 17:37:24

+0

請參閱我的編輯測試是否需要實現'onSaveInstanceState'的好方法。 – wsanville 2012-07-19 17:40:52

+0

這也非常有用,我會使用它。再次感謝! – Ixx 2012-07-19 17:41:54

0

onSaveInstanceState()onRestoreInstanceState()只有在需要重新創建活動時(通常在配置更改後(例如更改方向))才由Android顯式調用。