Activityのライフサイクル

(ブログ記事の一覧は「こちら」)

Androidアプリの開発を行っている人にとっては、Android Studioからアプリを実行すると、ActivityクラスのonCreateメソッドが最初に呼ばれることは知っていると思います。

実は他にもActivityクラスのメソッドが呼ばれています。それらを使用すると、Activityのライフサイクル(作成、停止、再開などの状態)を確認することができます。

Activityのライフサイクルのメソッドは以下があります。

onCreate
onRestart
onStart
onResume
onPause
onStop
onDestroy


以下はActivityのライフサイクルの簡略図になります。(Developerサイトより)

f:id:MJeeeey:20191124184537p:plain

参考:

アクティビティのライフサイクルについて

サンプルプログラム:

「MainActivity」から「SubActivity」に移動する場合、「SubActivity」から「MainActivity」に戻る場合について、Activityのライフサイクルを確認してみましょう。

プログラム

MainActivityを以下のように記述します。

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();

    private final static int REQUEST_MAIN = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample03_main);

        Log.v(TAG, "onCreate");

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // SubActivityの呼び出し
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivityForResult(intent, REQUEST_MAIN);
            }
        });
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.v(TAG, "onRestart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.v(TAG, "onStart");
    }

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

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

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

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

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_MAIN) {
                Log.v(TAG, "onActivityResult");
            }
        }
    }
}


SubActivityを以下のように記述します。

public class SubActivity extends AppCompatActivity {

    private static final String TAG = SubActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        Log.v(TAG, "onCreate");

        Button button = findViewById(R.id.button_sub);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                setResult(RESULT_OK, intent);

                // SubActivityの終了
                finish();
            }
        });
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.v(TAG, "onRestart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.v(TAG, "onStart");
    }

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

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

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

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

実行、確認

上記のサンプルプログラムを実行すると、Activityの状態により、Logcatには以下のように出力されることを確認してください。

MainActivityを起動
V/MainActivity: onCreate
V/MainActivity: onStart
V/MainActivity: onResume
SubActivityに移動
V/MainActivity: onPause
V/SubActivity: onCreate
V/SubActivity: onStart
V/SubActivity: onResume
V/MainActivity: onStop
SubActivityを終了して、MainActivityに戻る
V/SubActivity: onPause
V/MainActivity: onActivityResult
V/MainActivity: onRestart
V/MainActivity: onStart
V/MainActivity: onResume
V/SubActivity: onStop
V/SubActivity: onDestroy
MainActivityを終了
V/MainActivity: onPause
V/MainActivity: onStop
V/MainActivity: onDestroy