1.正常結束activity(back鍵和finish())下的保存數據:
onPause():用於保存數據操做, 緣由:onPause()和onResume()是在activity中一定會執行的。 onStop()不必定會執行。指針
2.系統由於內存不足,致使回收(即銷燬)activity或者屏幕旋轉時下的保存數據:
onSaveInstanceState():用於保存數據。 保存的數據能夠是edittext中輸入的數據,listview中item滑動到的指定位置。內存
oncreate():用於獲取保存的數據。可是必須判斷參數是否爲零,否則可能會報空指針異常get
onRestoreInstanceState(): 用於獲取保存的數據,能夠不用判斷參數是否爲零。it
注意點:屏幕旋轉是,系統會銷燬當前的activity,而後在從新建立一個新的activity(即從新啓動被銷燬的activity)。io
//(前提:因內存不足,致使系統回收不在棧頂的activity. 即,當用戶正常的使用back鍵結束和finish結束時,不會使用方法)
//非正常銷燬activity前提下,當前activity開始stop時,系統會調用該方法保存activity的狀態
//一般用於保存edittext中輸入的內容,或者listview中選中position
protected void onSaveInstanceState(Bundle outState) {
outState.putString("onSaveIntanceState", s);
outState.putInt("position",1);
super.onSaveInstanceState(outState);
Log.i("MainActivity", "onSaveInstanceState");
}方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);layout
edittext=(EditText) findViewById(R.id.editText1);
tv=(TextView) findViewById(R.id.textView1);數據
if(savedInstanceState!=null){
save1=savedInstanceState.getString("onSaveIntentState");
int i=savedInstanceState.getInt("position");
edittext.setText(save1);
tv.setText(i);
}
Log.i("MainActivity", "onCreate"+savedInstanceState);
s=edittext.getText().toString();
listview
}異常
//當前activity開始onstart()方法後,系統會調用該方法,用於恢復上一次的狀態。 //與oncreate()方法相比較,不須要判斷參數savaeInstanceState是否爲null protected void onRestoreInstanceState(Bundle savedInstanceState) { String s=savedInstanceState.getString("onSaveIntentState"); int i=savedInstanceState.getInt("position"); super.onRestoreInstanceState(savedInstanceState); Log.i("MainActivity", "onRestoreInstanceState");}