1. 程式人生 > >3.1日誌跟蹤Activity生命週期

3.1日誌跟蹤Activity生命週期

public class QuizActivity extends AppCompatActivity {
    private static final String TAG = "QuizActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz);
        Log.d(TAG, "onCreate(Bundle) called");
    }
    /**
    *注意,先是呼叫了超類的實現方法,然後才呼叫具體的日誌記錄方法。這些超類方
    法的呼叫不可或缺。從以上程式碼可以看出,在回撥覆蓋實現方法裡,超類實現方法
    總在第一行呼叫。也就是說,應首先呼叫超類實現方法,然後再呼叫其他方法。使
    用@Override註解,就是要求編譯器保證當前類擁有你要覆蓋的方法。對於拼寫錯
    誤的方法,比如onCreat()編譯器會發出警告
    */
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart called");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume called");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause called");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop called");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy called");
    }
}

開啟App到按返回鍵的過程:
在這裡插入圖片描述
單擊裝置的後退鍵,相當於告訴Android系統:“activity已用完,現在不需要它了。”隨即,系統就銷燬了該activity的檢視及其記憶體裡的相關資訊。這實際是Android系統節約使用裝置有限資源的一種方式。

開啟App到按Home鍵過程:
在這裡插入圖片描述
單擊主螢幕鍵,相當於告訴Android系統:“我去別處看看,稍後可能回來。”此時,Android系統會先暫停,再停止當前activity。這表明,Activity例項已處於停止狀態(在記憶體中,但不可見,不會活動在前臺)。這樣,Android系統就能快速響應,重啟QuizActivity,回到用
戶離開時的狀態。(需要注意的是,停止的activity能夠存在多久,誰也無法保證。系統需要回收記憶體時,它將首先銷燬那些停止的activity。)
從後臺程序回到前臺程序,系統沒有呼叫onCreate()方法(因為Activity例項還在記憶體裡,而是呼叫了onStart()和onResume()方法。QuizActivity只需要重新啟動,然後繼續執行。