【Androidアプリ開発】アクティビティのライフサイクル

Androidアプリ開発をやってると必ず出てくるアクティビティのライフサイクル
何となくの理解しかしていない状態で、ずっと来ちゃったので、今回、動かしてみて実感してみたいと思います。

参考書等でも良く出てくる様な簡単な2つのアクティビティを用意してボタンで行き来して
アクティビティがどんな状態に遷移しているのかを確認するよ

はじめに

まずは、空のActivityを二つ用意します。
空のプロジェクト作成やActivityを複数作る方法は、以下を参照

【Android Studio】はじめの一歩 Hello Worldを試す

続きを見る

【Android Studio】はじめの一歩 入力した値を次の画面へ渡すよ

続きを見る

アクティビティのライフサイクル

Activityは起動してから終了するまでの間に状態に応じて以下の様なメソッドが呼ばれる。

Google様から拝借

ソース

MainActivityソース

まずは、2つ用意するActivityの内の、起動画面になるMainActivityのソースです。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.i("Activity LifeCycle Test", "MainActivity onCreate called")
    }

    override fun onStart() {
        super.onStart()
        Log.i("Activity LifeCycle Test", "MainActivity onStart called")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i("Activity LifeCycle Test", "MainActivity onRestart called")
    }

    override fun onResume() {
        super.onResume()
        Log.i("Activity LifeCycle Test", "MainActivity onResume called")
    }

    override fun onPause() {
        super.onPause()
        Log.i("Activity LifeCycle Test", "MainActivity onPause called")
    }

    override fun onStop() {
        super.onStop()
        Log.i("Activity LifeCycle Test", "MainActivity onStop called")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i("Activity LifeCycle Test", "MainActivity onDestroy called")
    }

    fun onClickButton(view : View) {
        Log.i("Activity LifeCycle Test", "MainActivity Button Click")
        val intent = Intent(this, SubActivity::class.java)
        startActivity(intent)
    }
}

Activityが起動してから終了するまでの間に呼び出されるメソッドを全て実装して、
各メソッド内でどのメソッドが実行されたかをログ出力しています。

SubActivityソース

つづいて、もう一つの画面であるSubActivityのソースです。
ほぼMainActivityと同じなので、途中は省略します。

class SubActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)

        Log.i("Activity LifeCycle Test", "SubActivity onCreate called")
    }

    override fun onStart() {
        super.onStart()
        Log.i("Activity LifeCycle Test", "SubActivity onStart called")
    }

////////////////////// 省略 ////////////////////////////////////////////////

    override fun onDestroy() {
        super.onDestroy()
        Log.i("Activity LifeCycle Test", "SubActivity onDestroy called")
    }

    fun onClickButton(view : View) {
        Log.i("Activity LifeCycle Test", "SubActivity Button Click")
        finish()
    }
}

ボタン押下時の処理として、onClickButtonを用意してますが、その中身がMainActivityとは違います。
MainActivityではIntentを使ってSubActivityを起動していますが、SubActivityはfinish()で終了しています。

これで、実際に動かしてどんなログが出るか見てみましょう!

実行結果

実行結果は、AndroidStudioの画面下部にあるLogcatを開くと、ログが見れるようになります。

それでは、まずMainActivityでボタンを押してSubActivityが起動する時のメソッドが呼ばれる順番を見てみましょう

ログ

2022-11-26 20:47:48.489 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity Button Click
2022-11-26 20:47:48.502 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity onPause called
2022-11-26 20:47:48.532 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onCreate called
2022-11-26 20:47:48.538 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onStart called
2022-11-26 20:47:48.539 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onResume called
2022-11-26 20:47:49.058 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity onStop called

1行目でボタンクリックされた後、MainActivityではonPauseが呼ばれて、SubActivityが起動します。
SubActivityが起動するとMainActivityが非表示になるので、MainActivityのonStopが呼ばれていますね

つづいて、SubActivityでボタンを押してMainActivityに戻るときのメソッドが呼ばれる順番を見てみましょう

ログ

2022-11-26 20:55:18.310 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity Button Click
2022-11-26 20:55:18.443 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onPause called
2022-11-26 20:55:18.555 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity onRestart called
2022-11-26 20:55:18.559 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity onStart called
2022-11-26 20:55:18.560 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: MainActivity onResume called
2022-11-26 20:55:19.171 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onStop called
2022-11-26 20:55:19.172 11174-11174/com.example.activitylifecycletext I/Activity LifeCycle Test: SubActivity onDestroy called

1行目でボタンクリックされた後、SubActivityでonPauseが呼ばれて、MainActivityが再表示されます。
MainActivityは再表示なので、onCreate->onStartの順ではなく、onRestart->onStartの順になっています。
そして、SubActivityは非表示になるのではなく、finish()で終了しているので、onStop->onDestroyとメソッドが呼ばれています。

こんな感じでログを出すと、Activityの状態によってどのメソッドが呼ばれているのか分かるので
多少は理解が深まるんじゃないでしょうか…

おわりに

今回は、Androidアプリ開発で絶対に出てくるアクティビティのライフサイクルについてやってみました。
あまりにも良く出てくるネタなので、色んなところで紹介されてて、
たぶん、他でやってることと同じ事やってる可能性高いですが、自分の理解の為にプログラムも作ってみました。

次は何やるかまだ決めてないけど、また何かやってみるよー
それでは、おつかれさまでしたー

スポンサーリンク

  • この記事を書いた人

まさじぃ

ダメプログラマ歴17年です。 プログラミング関連の事や、 自分で使って良かったもの等の紹介をメインにやっています。

-プログラミング
-