Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 四大組件學習之Activity六

Android 四大組件學習之Activity六

編輯:關於Android編程

本節學習Activity的狀態保存與恢復。

先用例子開始:

布局文件主要是實現如下,大家自行編寫

\

Activity邏輯代碼:

 

public class FiveActivity extends Activity {

	private Button setButton;
	private Button getButton;
	private EditText editText;
	
	private float value;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.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() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				 value = 1.234f;
				editText.setText(hello world);
			}
		});
		
		getButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String string = editText.getText().toString();
				
				Toast.makeText(FiveActivity.this, string+ +value, 0).show();
			}
		});
	}
	
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		Log.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 stub
		Log.i(FiveActivity, onSaveInstanceState);
		outState.putFloat(1234, value);
		super.onSaveInstanceState(outState);
	}

這樣的話,當殺死進程後,再次進來我們的數據就會正常的出現。

 

 

同時, 除系統資源不足時,或者手機的屏幕方向變化時,改變語言時,都會導致Activity重現銷毀,然後重現再創建。這時候如果我們不保存需要保存的數據,也會出現不對的情況。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved