Android開發筆記-UI狀態儲存

內容說明:使用bundle儲存UI狀態

資料來源:Android Developers

在「Activity的生命週期」中有提到,如果我們沒有適時的儲存使用者輸入的資料,那麼那些資料可能會消失,造成不良的使用者經驗。為了避免這種狀況,在官方網站也提出了一種解決的方式。

如果眼睛夠銳利,相信不難發現Android的程式在onCreate時會載入一個Bundle參數,利用這個參數就可以”暫存”使用者的UI資訊。Android程式提供了一個方法讓我們儲存狀態:onSaveInstanceState(),在Eclipse選單 Source > Override/Implement Methods 中可以開啟這個方法。當你有任何需要暫存的資料時,直接在onSaveInstanceState()儲存即可。

@Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);

        //儲存UI狀態到bundle中
        outState.putString("str", "value");
        outState.putInt("int", 1);
        outState.putBoolean("boolean", true);
    }

onSaveInstanceState()會在activity被銷毀之前執行,但是由於這個方法不屬於生命週期之一,所以官方網站有特別提到它不一定會被執行,只適合用來暫存UI畫面的資料。如果需要儲存重要的資料,最好是在onPause()進行儲存。

在onSaveInstanceState()儲存的bundle資料,會在onCreate()或是onRestoreInstanceState()時載入,所以讀取資料的動作可以寫在這二個方法當中。onRestoreInstanceState()會在onStart()之後執行,當我們在onCreate()需要處理比較多的事情時,可以將回復UI的動作交給onRestoreInstanceState()處理。無論要在那裡讀取,只要直接取得Bundle savedInstanceState內的資料即可:

if (savedInstanceState != null) {    //讀取bundle儲存的狀態
            String inputString = savedInstanceState.getString("str");
        }