學習記錄自《Android開發藝術探索》.
/**
* 異常情況下的Activity,生命週期
*/
public class ExceptionActivityLife extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//異常銷燬時調用, 在此保存當前的狀態
//調用時機在onStop之前
//將此時保存的Bundle對象,傳遞給onCreate和onRestoreInstanceState方法
outState.putChar("destory", 'a');
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//當前Activity被異常銷燬重建時調用,此時可以獲取銷燬時保存的狀態
//在onStart之後被調用
char destory = (char) savedInstanceState.get("destory");
Log.e("ground", destory + "");
}
}
異常情況如:系統內存不足時將Activity回收掉.屏幕的旋轉等,都會導致異常情況的發生,同時會回調以上倆個方法,所以我們可以在onSaveInstanceState方法中保存當前的數據,如:TextView的內容,ListView的position等,以待Activity恢復的時候再從onRestoreInsatanceState中取出.
如果不是異常銷燬,是不會走以上兩個方法的,所以在被異常銷燬時,如果要從onCreate中取出Bundle的話,需要判斷是否爲null,如果在onRestoreInstanceState中取出,是不用加爲空判斷的.