Android 四大組件學習之Activity六
本節學習Activity的狀態儲存與恢複。
先用例子開始:
布局檔案主要是實現如下,大家自行編寫
Activity邏輯代碼:
public class FiveActivity extends Activity {private Button setButton;private Button getButton;private EditText editText;private float value;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_five);setButton = (Button)findViewById(R.id.button1);getButton = (Button)findViewById(R.id.button2);editText = (EditText)findViewById(R.id.editText1);setButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub value = 1.234f;editText.setText(hello world);}});getButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString string = editText.getText().toString();Toast.makeText(FiveActivity.this, string+ +value, 0).show();}});}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubLog.i(FiveActivity, onSaveInstanceState);super.onSaveInstanceState(outState);}}第一種情況:
按set按鈕,並且按get按鈕
當然了,這時候按back按鈕,當再次進入後,會發現輸入框裡沒有內容,同時按get得到為0.0
同時第一種情況中我的列印Log.i(FiveActivity, onSaveInstanceState);始終也是沒有列印
接著第二種情況:
當我們set後,再按get後。 這次不按Back鍵,這次按Home鍵:
當我們按Home鍵後,我們的Activity就處於stop狀態,這時候我們的列印語句出現了
這時候我們手動殺死FiveActivity
這時候在啟動Activity,當再次get時就會發現:
EditText中的文字Hello World依舊存在,而我的Value變數變為0.0了。
總結:
1: 對於第一種情況,Android系統覺得是使用者自願的行為,覺得那就沒有儲存的必要了。
2: 對於第二種情況,EditText中的文字存在那是因為Android系統中幾乎對所以的UI都實現了OnSaveInstanceState方法,這是預設的實現。所以當我們Home出去時就會列印出現,至於我們的變數為啥沒有恢複,很明顯那是因為沒人儲存它的值,這就得需要我們程式員自己手動儲存。
當我們在OnCreate方法中添加:
if(savedInstanceState != null)value = savedInstanceState.getFloat(1234);
protected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubLog.i(FiveActivity, onSaveInstanceState);outState.putFloat(1234, value);super.onSaveInstanceState(outState);}
這樣的話,當殺死進程後,再次進來我們的資料就會正常的出現。
同時, 除系統資源不足時,或者手機的螢幕方向變化時,改變語言時,都會導致Activity重現銷毀,然後重現再建立。這時候如果我們不儲存需要儲存的資料,也會出現不對的情況。