Activityのライフサイクル Androidアプリってどんな風に動いてるの?
こんにちは、鬱太郎です。今日はAndroidアプリのライフサイクル「アクティビティのライフサイクル」について学んだのでそれをまとめたいと思います。
Activityクラス
上記ドキュメントから、クラスは
package android.app; public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, View.OnCreateContextMenuListener, ComponentCallbacks2
ということがわかります。継承の詳細は
パッケージ名 | クラス名 |
---|---|
java.lang | Object |
android.content | Context |
android.content | ContextWrapper |
android.view | ContextThemeWrapper |
android.app | Activity |
実装の詳細と主な内容は
インターフェース名 | 主な内容 |
---|---|
LayoutInflater.Factory2 | 引数を元に新しいViewを作る関数を実装する |
Window.Callback | ディスプレイに関するイベントのコールバック関数を実装する |
KeyEvent.Callback | キーボードに関するイベントのコールバック関数を実装する |
View.OnCreateContextMenuListener | メニューを生成する関数を実装する |
ComponentCallbacks2 | システムが設定を変更したり、メモリが少なくなった際に呼ばれるコールバック関数を実装する |
すべてのフィールドやメソッドを説明しきれないほど、Activityクラスは継承・実装がなされています。
アクティビティの状態遷移
アクティビティーには基本的に3つの状態があります。
1.実行中(再開)状態
アクティビティが画面上にでて、ユーザーが操作できる状態。
2.一時停止状態
他のアクティビティが画面上に出てメインに表示されているが、このアクティビティも表示されている状態。このアクティビティの上に他のアクティビティが表示されているが、画面すべて覆われているわけではない状態。システムによっては強制終了される場合もある。
3.停止状態
他のアクティビティによって完全に見えない状態。アクティビティがバックグラウンドにある状態。システムによっては強制終了される場合がある。
通常は1の再開状態ですね。ホームボタンなどでアプリを終了し、右下のボタンからアプリを開ける状態を3の停止状態といえます。
Activityのメソッドとアクティビティの状態の関係
公式サイトにある図から
アクティビティの状態遷移の際に呼ばれるメソッドは 起動→実行中(再開状態)
onCreate->onStart->onResume
実行中→一時停止状態
onPause
一時停止状態or実行中→停止状態
(onPause->)onStop
一時停止状態→実行中
onResume
停止状態→実行中
onRestart->onStart->onResume
→終了
(onPause->onStop->)onDestroy
一番重要なメソッドはonCreate
Activityで一番重要なコールバックメソッドはonCreateです。上記にあるアクティビティのライフサイクルの図からも分かりますね。アクティビティが起動でした際に、プログラマが一番最初に操作できるメソッドがonCreateです。ここでレイアウトを設定したり、Listenerを設定したりします。
実際にプログラムを作って確かめてみよう
Activityのコールバックメソッドを追加
Android Studioを起動させ、各コールバックメソッドを追加しましょう追加した例は以下のようになります。
実行確認
実際にVMで実行してみて、いつコールバックメソッドが呼び出されるかを確認していきましょう。
説明しやすくするため私は各コールバックメソッドの末尾に
try{ Thread.sleep(1000); }catch(InterruptionException e){ e.printStackTrace(); }
を追加しました。コールバックメソッドが呼ばれ、メッセージを出力した後に1秒待機するものです。ですが、コールバックメソッドで長期間処理するのは好まれないと思うので、今回のテストだけにします。
起動→実行中(再開状態)
アプリを起動
「onResume」の後に画面が初期化されているのがポイントです。
一時停止状態or実行中→停止状態
ホームボタンを押す
ホームボタンを押した瞬間に「onPause」画面からアプリケーションが消えた後に「onStop」が呼び出されているのがポイントです。
履歴から別のアプリケーションを起動
履歴ボタンを押した瞬間に「onPause」画面が完全に小さくなってから「onStop」となるのがポイントです。
停止状態→実行中
履歴からアプリを起動
アプリを選択した瞬間に「onRestart」画面が表示されたままの状態でアプリが起動「onStart」「onResume」と続きます。停止状態でもアプリの状態を保存しているため、初回の起動時のように「onResume」まで待たなくても画面が出現します。
→終了
履歴からアプリを消去
アプリを消去したと同時に「onDestroy」が出現onDestroyメソッド中のsleepを待たずに画面が消えました。
終わりに
アクティビティのライフサイクル、いかがでしたか?私の知識経験不足のため、不完全なまとめとなってしまったこと申し訳なく思っています。
いろいろ調べてみた結果、onCreate以外使わないな!ってことがわかりました。そんな高度な開発しないですね。。。
記事書いてる最中に「あ、これ使わないな!」と思ったけど(ここまで書いたし、もったいないから投稿しよう)ということで、今回投稿しました。
ここまでご覧いただき、誠にありがとうございます。
またね(‘ω’)ノ
p.s.
関数とメソッドやActivityとアクティビティの表記ゆれ、ごめんなさい。Javaだとメソッドと統一したほうがいいのでしょうけれど、文字数の関係上(あるいはミス)関数としたりしています。アクティビティとActivityは前者がアプリケーション全体のことを指し、後者がクラスのように内部構造を表すものと認識しています。
リンク等まとめ
名称 | リンク先 |
---|---|
Activityクラスドキュメント | https://developer.android.com/reference/android/app/Activity.html |
アクティビティについて | https://developer.android.com/guide/components/activities.html?hl=ja |