Android Kotlin基礎講座 04.2: 複雑なライフサイクル状態
目次
タスク:コンフィグレーションの変化について
アクティビティとフラグメントのライフサイクルの管理において、もう一つ理解しなければならない重要なことがあります。それはコンフィグレーション(画面の向きなどの構成)の変化がどのようにアクティビティとフラグメントのライフサイクルに影響を与えるかということです。
コンフィグレーション変化は端末の状態が根本的に変化したときに発生し、システムが変化を解決する最も簡単な方法は、完全にシャットダウンしてアクティビティを再構築することです。例えばユーザーが端末の言語を変更する場合、異なるテキストの向きなどに対応するために、全体のレイアウトが変更される必要があることがあります。また、ユーザーが端末をドックに差し込んだり、物理キーボードを追加した場合、アプリのレイアウトは異なるディスプレイサイズやレイアウトを利用しなければならないかもしれません。
さらに端末の向きが変わった場合、レイアウトはその向きに対応する必要があることもあります。
ステップ1:端末の回転とライフサイクルコールバックについて
- コンパイルしてアプリを起動し、Logcatを開いてください。
- 実機、またはエミュレーターをランドスケープモード(横向き)に回転させてください。エミュレーターは回転ボタンをおして右か左に回転させることができます。またはConrtol(Macの場合Command)とカーソルキーを押して回転させることもできます。
- Logcatの出力を調べます。MainActivityについての出力のみにフィルタリングしてください。
実機やエミュレーターが回転した際、システムがアクティビティをシャットダウンするための全てのライフサイクルコールバックを呼び出していることを確認してください。それからアクティビティが再構成され、システムはアクティビティを起動するための全てのコールバックを呼び出しています。 - MainActivityの中のonSaveInstanceState()メソッド全体をコメントアウトしてください。
- コンパイルしてアプリを起動してください。カップケーキを数回タップし、画面を回転させてください。今回は端末が回転し、アクティビティがシャットダウン、再構成されるとアクティビティがデフォルトの値に戻っています。
コンフィグレーション変化が起こると、Androidは前のタスクで学習したアプリの状態を保存・復元するためのbundleと同じbundleを使います。プロセスのシャットダウンのときのように、onStaveInstanceState()を使ってアプリのデータをbundleに保存しましょう。そしてonCreate()の中でデータを復元すれば、端末が回転してもアクティビティの状態が失われるのを防ぐことができます。 - MainActivityのonSaveInstanceState()メソッドのコメントアウトを解除してください。アプリを起動してカップケーキをタップし、端末の向きを回転させてください。今回はデザートのデータが回転した後でもキープされていることを確認してください。
完成済みプロジェクト
完成済みプロジェクトは以下からダウンロードできます。