1. 程式人生 > >savedInstanceState的作用和用法

savedInstanceState的作用和用法

寫過Android程式的都知道Activity中有一個名稱叫onCreate的方法。該方法是在Activity建立時被系統呼叫,是一個Activity生命週期的開始。可是有一點容易被忽視,就是onCreate方法的引數savedInstanceState。因為在一般的程式開發中,很少用到這個引數。

onCreate方法的完整定義如下:

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}


從上面的程式碼可以看出,onCreate方法的引數是一個Bundle型別的引數。Bundle型別的資料與Map型別的資料相似,都是以key-value的形式儲存資料的。

從字面上看savedInstanceState,是儲存例項狀態的。實際上,savedInstanceState也就是儲存Activity的狀態的。那麼,savedInstanceState中的狀態資料是從何處而來的呢?

下面我們介紹Activity的另一個方法saveInstanceState。

onsaveInstanceState方法是用來儲存Activity的狀態的。當一個Activity在生命週期結束前,會呼叫該方法儲存狀態。這個方法有一個引數名稱與onCreate方法引數名稱相同。如下所示:

public void onSaveInstanceState(Bundle savedInstanceState){
super
.onSaveInstanceState(savedInsanceState); }

在實際應用中,當一個Activity結束前,如果需要儲存狀態,就在onsaveInstanceState中,將狀態資料以key-value的形式放入到savedInstanceState中。這樣,當一個Activity被建立時,就能從onCreate的引數savedInsanceState中獲得狀態資料。

狀態這個引數在實現應用中有很大的用途,比如:一個遊戲在退出前,儲存一下當前遊戲執行的狀態,當下次開啟時能接著上次的繼續玩下去。再比如:電子書程式,當一本小說被閱讀到第199頁後退出了(不管是記憶體不足還是使用者自動關閉程式),當下次開啟時,讀者可能已忘記了上次已閱讀到第幾頁了,但是,讀者想接著上次的讀下去。如果採用saveInstallState引數,就很容易解決上述問題。