Android Activity LifeCycle 解釋

假設具有 MainActivity 的應用程式可以使用按鈕單擊呼叫 Next Activity。

public class MainActivity extends AppCompatActivity {

    private final String LOG_TAG = MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(LOG_TAG, "calling onCreate from MainActivity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from MainActivity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from MainActivity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from MainActivity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from MainActivity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from MainActivity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from MainActivity");
    }
    public void toNextActivity(){
        Log.d(LOG_TAG, "calling Next Activity");
        Intent intent = new Intent(this, NextActivity.class);
        startActivity(intent);
    } }

public class NextActivity extends AppCompatActivity {
    private final String LOG_TAG = NextActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);
        Log.d(LOG_TAG, "calling onCreate from Next Activity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from Next Activity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from Next Activity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from Next Activity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from Next Activity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from Next Activity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from Next Activity");
    } }

在首次建立應用程式
d / MainActivity:從主叫 MainActivity 的 onCreate
d / MainActivity:從主叫 MainActivity 呼叫 onStart
d / MainActivity:呼叫從 MainActivity 的 onResume
被稱為

當螢幕休眠時
08:11:03.142 D / MainActivity:從 MainActivity
08:11:03.192 呼叫 onPause D / MainActivity:呼叫從 MainActivity 呼叫 onStop
。當它醒來時再次喚醒
08:11:55.922 D / MainActivity:從 MainActivity
08:11:55.962 呼叫 onRestart D / MainActivity:從 MainActivity
08:11:55.962 呼叫 onStart D / MainActivity:從 MainActivity 呼叫 onResume
被呼叫

Case1: 從 Main Activity
D / MainActivity 呼叫 Next Activity 時:呼叫 Next Activity
D / MainActivity:從 MainActivity 呼叫 onPause
D / NextActivity:從 Next Activity 呼叫 onCreate
D / NextActivity:從 Next Activity 呼叫 onStart
D / NextActivity:呼叫 onResume 來自下一個活動
D / MainActivity:從 MainActivity 呼叫 onStop

使用後退按鈕
D / NextActivity 從 Next Activity 返回主 Activity 時 :從 Next Activity
D / MainActivity 呼叫 onPause :從 MainActivity
D / MainActivity 呼叫 onRestart:從 MainActivity D / MainActivity 呼叫 onStart
:從 MainActivity
D / NextActivity 呼叫 onResume :從 Next Activity
D / NextActivity 呼叫 onStop:從 Next Activity 呼叫 onDestroy

案例 2: 當活動被部分遮擋時(當按下概覽按鈕時)或當應用程式轉到後臺並且另一個應用程式完全遮蓋它時
D / MainActivity:從 MainActivity
D / MainActivity 呼叫 onPause:從 MainActivity 呼叫 onStop
並且當應用程式返回到前臺準備接受使用者輸入,
D / MainActivity:從 MainActivity
D / MainActivity 呼叫 onRestart:從 MainActivity 呼叫 onStart
D / MainActivity:從 MainActivity 呼叫 onResume
被呼叫

情況 3: 呼叫活動以實現隱式意圖並且使用者進行選擇時。例如,當按下共享按鈕並且使用者必須從顯示的應用程式列表中選擇一個應用程式
D / MainActivity:從 MainActivity 呼叫 onPause

活動現在可見,但現在不活躍。選擇完成且 app 處於活動狀態時
D / MainActivity:呼叫 MainActivity
中的 onResume

案例 4:
當應用程式在後臺被殺死(為另一個前臺應用程式釋放資源)時, onPause (用於預蜂窩裝置)或 onStop (用於自蜂窩裝置)將是應用程式終止之前呼叫的最後一個。

每次執行應用程式時,都會呼叫 onCreate 和 onDestroy。但 onPause,onStop,onRestart,onStart,onResume 可能在生命週期中被多次呼叫。