うきっとラボ~中卒から始めるプログラミング~

中卒のポンコツ太郎が立派なプログラマになるまでの道のり

【Android Studio】Applicationクラスのメソッドが呼ばれるタイミングを検証してみた

はじめに

「Activityのコールバックメソッドの呼ばれ方」については、
こちらをご覧ください!
ukit-labo.hateblo.jp


前回は、Activityのコールバックメソッドの呼ばれ方を検証しました!
では、Applicationクラスのメソッドはどうでしょう?
実際にアプリを動かしながらどのようにして各メソッドが呼ばれているのかを確認してみます。
各メソッドにログ出力を実装して、前回と同じパターンで検証してみます!

また、内容が重複するといけないので、
Activityのコールバックメソッドについては無視してあります。

Applicationクラスのメソッドが呼ばれた時にだけ、順序がわかりやすいように一緒に載せています。

さぁ、やっていきましょう!


アプリを起動する

【検証】
[ホーム画面] → [アプリ起動]

【結果】
①App_onCreate()
②onCreate()
③onStart()
④onResume()
~アプリ起動~


アプリを終了する

【検証】
[アプリ起動] → [アプリ終了]

【結果】
呼び出されない


スリープ状態にする

【検証】
[アプリ起動] → [スリープ]

【結果】
呼び出されない

スリープを解除する

【検証】
[アプリ起動] → [スリープ] → [スリープ解除]

【結果】
呼び出されない

タスクビューにする、ホーム画面に戻る

【結果】
呼び出されない


画面を遷移する

【検証】
[Main] → [Sub]

【結果】
呼び出されない


遷移先から戻る

【検証】
[Main] → [Sub] → [Main]

【結果】
呼び出されない


遷移後にアプリを強制終了してみる

【検証】
[Main] → [Sub] → [アプリ終了]

【結果】
呼び出されない


遷移後に電源を切ってみる

【検証】
[Main] → [Sub] → [電源OFF]

【結果】
呼び出されない


MainActivity表示中に画面を回転させてみる

【検証】
[Main] → [横画面にする]

【結果】
①App_onConfigurationChanged()
②Main_onPause()
③Main_onStop()
④Main_onDestroy()
⑤Main_onCreate()
⑥Main_onStart()
⑦Main_onResume()
~画面回転~



遷移後に画面を回転させてみる

【検証】
[Main] → [Sub] → [横画面にする]

【結果】
①App_onConfigurationChanged()
②Sub_onPause()
③Sub_onStop()
④Sub_onDestroy()
⑤Sub_onCreate()
⑥Sub_onStart()
⑦Sub_onResume()
~画面回転~



遷移後に画面を回転させ、そのままMainActivityに戻ってみる

【検証】
[Sub] → [横画面にする] → [Main]

【結果】
呼び出されない

※画面回転時には「App_onConfigurationChanged()」が呼び出されています


遷移後に画面を回転させ、また戻して、それからMainActivityに戻ってみる

【検証】
[Sub] → [横画面にする] → [縦画面にする] → [Main]

【結果】
呼び出されない

※画面回転時には「App_onConfigurationChanged()」が呼び出されています


まとめ

今回の検証は以上です!
Activityと違い、呼び出される個所がかなり限定されていますね!
まとめると、こんな感じでしょうか。

onCreate()はアプリ起動時に呼び出されていました。
また、画面が回転した時Activityは再起動されていましたが、Applicationではされないようです。

onConfigrationChanged()は、画面が回転した時、真っ先に呼び出されていました。
これは「コンポーネントの実行中にデバイス構成が変更される」と呼ばれるそうです。
”画面が回転する”というのもその条件の一つのようですね。

Activityでは、遷移後のアクティビティから戻る際の”画面の向き”によって処理が変わっていましたね(^_^)v
しかしApplicationでは、戻ってきた時の画面の向きによる呼び出し方の違いはありませんでした。

また、Applicationではアプリ終了時に呼び出されるメソッドはありません。
「onTerminate()」というものがありますが、これはエミュレータ上で呼ばれるメソッドだそうで、
実機では呼ばれることがないようなので注意です(/・ω・)/
※私は実機を使ってテストをしているため、このメソッドは呼ばれませんでした。