Activityのライフサイクル
(ブログ記事の一覧は「こちら」)
Androidアプリの開発を行っている人にとっては、Android Studioからアプリを実行すると、ActivityクラスのonCreateメソッドが最初に呼ばれることは知っていると思います。
実は他にもActivityクラスのメソッドが呼ばれています。それらを使用すると、Activityのライフサイクル(作成、停止、再開などの状態)を確認することができます。
Activityのライフサイクルのメソッドは以下があります。
onCreate onRestart onStart onResume onPause onStop onDestroy
以下はActivityのライフサイクルの簡略図になります。(Developerサイトより)
参考:
サンプルプログラム:
「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