※本記事は2021年7月2日に更新しました。
「いつも使ってるonCreateって何なんだろう?」
「アプリを落としたら内部は一体どうなるの?」
今回は、画面を司るアクティビティの、ユーザーの動きによる状態の遷移と、
その状態によって呼び出されるメソッドについて解説します。
本記事の内容は、以下のエラー等の回避方法の基礎となります。
- アプリの使用中に電話を受信するとクラッシュする
- ユーザーがアプリを離れてから後で戻ると、入力していたデータが失われる
- 縦向き、横向きの入れ替えをするとデータが失われる
図解を用いてわかりやすく解説していますのでぜひご一読ください。
前提として、本記事はAndroid Studio 4.2.1を対象に記載します。
本記事の使用言語はJavaとなります。
今回はProgate のJavaのレッスンがすべて理解できている、
という前提の上進めていきます。
それでは早速参りましょう!
前回の記事はこちら
アクティビティのライフサイクル
画面を司るアクティビティの状態遷移のことをライフサイクルと呼びます。
アクティビティはいくつかの状態を持っています。
このアクティビティが新しい状態になると、
状態遷移に対応したメソッドが呼び出されます。
メソッドの種類は以下の通りです。
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroy()
- onRestart
このメソッドが呼び出されるタイミングを表したライフサイクルの図が次の図となります。
各メソッドについて解説します。
onCreate()
onCreateメソッドは、アクティビティを最初に作成したときに呼び出されるメソッドです。
このメソッドはレイアウトファイルの読み込み等を行うため、
基本的にオーバーライドする必要があります。
このメソッドの中では、アプリを立ち上げたときに実行してほしい内容を記載します。
例を挙げます。
- setContentViewメソッドでレイアウトファイルを設定する
- ボタンにボタンリスナを設定する
- リストにデータを格納する
- アニメーションの設定を行う
このメソッドが終了すると、アクティビティは開始状態になり、
onStartメソッド、onResumeメソッドを呼び出します。
onStart()
アクティビティが開始状態になると呼び出されるメソッドです。
このメソッドの呼び出しによって、アクティビティがユーザーに表示されます。
このメソッドが終了すると、アクティビティは再開状態になり、
onResumeメソッドが呼び出されます。
onResume()
アクティビティが再開状態になると呼び出されるメソッドです。
このメソッドが呼び出されている状態は、アプリをユーザーが扱っている状態です。
電話の着信など、アプリ間の移動が発生するまで、アプリはこの状態を保持します。
アプリ間の移動が発生すると、アクティビティは一時停止の状態となり、
onPauseメソッドが呼び出されます。
onResumeメソッドはアクティビティが一時停止の状態から再開状態に戻ると、
再び呼び出されます。
このため、onPauseで何か処理を実行した場合、
不具合なく再開できるようこのメソッドで初期化を行う必要があります。
onPause()
アクティビティが一時停止の状態になった際呼び出されるメソッドです。
アクティビティがすぐに再開されるのであれば、onPauseメソッドを使用して、
状態を保存しておくことができます。
このメソッドが呼び出されるのは、例えば以下のような場合があります。
- 他のアプリがこのアプリの実行中に割り込んだ時
- ダイアログが表示されたとき
onPauseの実行は非常に短時間で終了するため、
アプリデータ、ユーザーデータの保存には非推奨となっています。
このような作業は、次のonStopにて行うよう推奨されています。
アクティビティが完全に非表示となると、システムはonStopメソッドを呼び出します。
onStop()
onStopメソッドはアクティビティがユーザーから見えなくなった際に
呼び出されるメソッドです。
例えば新しいアクティビティが画面全体を覆い隠す場合などです。
このメソッドではアプリがユーザーに表示されていない間は
不要なリソースをアプリから解放、調整する必要があります。
例えばアニメーションの一時停止などです。
アクティビティが戻ると、onRestartメソッドを呼び出します。
また、アクティビティが終了すると、onDestroyメソッドが呼び出されます。
onDestroy()
アクティビティが破棄される直前に呼び出されるメソッドがonDestroyメソッドです。
このメソッドが呼び出される例は以下です。
- ユーザーがアクティビティを完全に閉じる、またはfinish()が呼び出された場合
- デバイスの向きの変更により、アクティビティが一時的に破棄される場合
このメソッドの後にアクティビティを再生成する場合、
呼び出されるメソッドはonCreateとなります。
onRestart
アクティビティが完全に非表示の状態から表示状態に戻る時に呼び出されるメソッドです。
このメソッドの後、onStartメソッドが呼び出され、画面が再開します。
まとめ
今回は、画面を司るアクティビティの、ユーザーの動きによる状態の遷移と、
その状態によって呼び出されるメソッドについて解説しました。
少し専門的な内容なので、難しいと思います。
まず押さえるべきなのは、画面遷移の際に様々なメソッドが呼び出されることです。
このことさえ理解しておけば、データの保存など、
タイミングを逃すことがなくなると思います。
本記事が初心者の方の参考になれば幸いです。
コメント