アクティビティのライフサイクル
これで、ひととおり、Androidの画面遷移ロジックについて解説してきました。この段階で、アクティビティのライフサイクルについて解説しておこうと思います。
下図を見てください。
この図はアクティビティのライフサイクルを表したもので、Activityクラスのリファレンスページに掲載されているものです。アクティビティは、起動してから終了するまでの間、その画面の状態に応じてさまざまなメソッドが呼びされる仕組みとなっています。これをライフサイクルといい、図7はどのタイミングでどのメソッドが呼び出されるかを表しています。第5回「Androidアプリ処理の基本~イベントとリスナ」で、onCreate()はAndroidアプリが起動するとまず実行されるメソッド、と紹介しましたが、実は、図7を見てわかるように、onCreate()以降も画面が表示されるまでに、onStart()、onResume()が呼び出されているのです。
これらのメソッドが呼び出されるタイミングを体感できるアプリを用意しました。ダウンロードサンプルのLifeCycleSampleプロジェクトを起動してみてください。このサンプルは、画面上のボタンをタップすることで、2個のアクティビティを行ったり来たりできるようになっています。そこで、Activityクラスのソースコードを見てください。図7記載のメソッドをすべてオーバーライドし、メソッド中に
Log.i("LifeCycleSample", "Main onCreate() called.");
のようなコードを記述しています。これは、AndroidのLogクラスのメソッドi()を使って、ログレベルInfoでログを記述する処理です。引数1はログのタグを指定し、引数2でログメッセージを指定します。
つまり、ライフサイクルのすべてのメソッドでログを書き出す処理を記述し、ログを参照することで、どのメソッドがどのタイミングで実行されているのかを確認できるという仕組みです。ログは、Android Studio下部のAndroid Monitorのlogcatタブで確認できます。
ログを確認しながらアプリのボタンをタップしてみてください。さらに、ホームボタンや戻るボタンも確認してみてください。そうすると面白いことに気付くと思います。実は、ホームボタンでは、onDestory()は呼び出されていません。つまり、アプリは終了していないのです。一方、戻るボタンはonDestory()が呼び出されます。つまり、アプリを終了させるのは戻るボタンなのです。
このことは、Androidの挙動として意識しておく必要があると思います。
まとめ
今回は、Androidの画面遷移とその中心となるIntentクラスの使い方について解説しました。
次回は、メニューを紹介します。