Android Kotlin基礎講座 04.2: 複雑なライフサイクル状態

Android Kotlin基礎講座

まとめ

ライフサイクル

  • ライフサイクルコールバック中で何かをセットアップ、またはスタートさせた場合、対応するコールバック中で削除・ストップします。ストップさせることで、必要がなくなった後もそれが動作しっぱなしになっていないことを確認できます。
    例として、onStart()の中でタイマーをセットアップした場合、onStop()の中でそれをストップさせる必要があります。
  • onCreate()はアプリ初回起動時に、一度だけ初期化したい部分にだけ利用します。onStart()を使ってアプリ起動時、アプリがバックグラウンドから戻るときの両タイミングで実行したい処理を実行させます。

lifecycleライブラリ

  • Android lifecycleライブラリを使って、ライフサイクルの制御をアクティビティやフラグメントから実際のライフサイクルの状態を知る必要があるコンポーネントに移すことができます。
  • ライフサイクルオーナーはアクティビティやフラグメントを含むライフサイクルを持つコンポーネントのことです。ライフサイクルオーナーはlifecycleOwnerインターフェースを実装します。
  • ライフサイクルオブザーバーは現在のライフサイクル状態を監視し、ライフサイクルが変化したときに処理を実行します。ライフサイクルオブザーバーはLifecycleObserverインターフェースを実装します。
  • Lifecycleオブジェクトは実際のライフサイクル状態を保持し、ライフサイクルが変化したときにイベントを起こします。

ライフサイクル監視クラスの作成方法

  • LifecycleObserverインターフェースをライフサイクルを監視する必要があるクラスに実装してください。
  • アクティビティやフラグメントからlifecycleオブジェクトを用いてライフサイクルオブザーバークラスを初期化してください。
  • ライフサイクルオブザーバークラスの中で、ライフサイクルの変化に応じて呼び出したいメソッドをライフサイクルの状態と共にアノテーションしてください。

    例えば、@OnLifecycleEvent(Lifecycle.Envent.ON_START)アノテーションはこのメソッドがライフサイクルがonStartの状態になったときに呼び出されることを意味しています。

プロセスシャットダウンとアクティビティ状態の保存

  • Androidはバックグラウンドで動作するアプリを規制することでフォアグラウンドのアプリが快適に動作するようにしています。この規制はバックグラウンドにアプリができる処理の量を制限しているということになります。時にはアプリのプロセス全体をシャットダウンすることもあります。
  • ユーザーはバックグラウンドにあるアプリがシステムによってシャットダウンされたかを知ることはできません。アプリは最近開いた画面に存在し続け、ユーザーがアプリを離れる前の状態から再開できるようにするべきです。
  • Androidデバッグブリッジ(adb)はエミュレーターやコンピューターに接続された実機に命令を送ることができるコマンドラインツールです。adbを使ってアプリのプロセスのシャットダウンをシミュレートすることができます。
  • Androidがアプリのプロセスをシャットダウンする際、onDestroy()ライフサイクルメソッドは呼ばれません。アプリはただ停止するだけです。

アクティビテとフラグメントの状態の維持

  • アプリがバックグラウンドに置かれると、onStop()が呼び出された直後にデータがbundleに保存されます。EditTextなど、いくつかのデータは自動で保存されます。
  • bundleはBundleのインスタンスで、キーと値がセットのコレクションです。キーはstringを使用します。
  • onSaveInstanceState()コールバックを使って、アプリが自動でシャットダウンされた場合に保持したいデータをbundleに保存します。bundleにデータを保存するために、putInt()のようなputから始まるbundleメソッドを使います。
  • onRestoreInstanceState()メソッドの中でbundleからデータを取り出すことができます。またはonCreate()の中でもよく取り出されます。onCreate()メソッドはbundleを保持しているsavedInstanceStateパラメーターを持っています。
  • savedInstanceState変数がnullである場合、アクティビティはbundleなしで起動し、復元されるデータはありません。
  • キーを用いてbundleからデータを取り出すためには、getInt()のようなgetから始まるBundleメソッドを使います。

コンフィグレーション変化

  • コンフィグレーション変化は端末の状態が根本から変わり、システムが変化に対応するためにアクティビティのシャットダウンやリビルドを行う際に起こります。
  • 最も一般的なコンフィグレーション変化の例はユーザーが端末をポートレート(縦)からランドスケープ(横)に、またはその逆に変化させた場合です。コンフィグレーション変化は端末の言語の変更やハードウェアキーボードが接続された場合などにも起こります。
  • コンフィグレーション変化が起こると、Androidはアクティビティライフサイクルのシャットダウン用のコールバックを呼び出します。その後Androidはスクラッチからアクティビティを再起動し、全てのライフサイクルのセットアップ用コールバックを呼び出します。
  • Androidはコンフィグレーション変化によってアプリをシャットダウンする際には、onCreate()で利用可能なbundleを利用してアクティビティを再起動します。
  • プロセスのシャットダウンと同様に、onSaveInstanceState()の中でbundleにアプリのデータを保存します。

お疲れさまでした。次の講座は 5.1 ViewModelとViewModelProviderです。

おすすめ書籍

Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。

実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。

コメント

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました