異常銷燬時Activity的生命週期

學習記錄自《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中取出,是不用加爲空判斷的.

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章