本連載では、バージョンの違いに左右されないスタンダードなアーキテクチャで実業務で使えるAndroidアプリ開発のノウハウを提供していきます。今回は、Androidアプリ開発において必ず押さえておかなければならないライフサイクルイベントについて解説します。
本連載「実業務でちゃんと使えるAndroidアプリ開発入門」では、バージョンの違いに左右されないスタンダードなアーキテクチャで、セキュリティやパーミッション、テストのしやすさ、開発効率の向上などを考慮した、実業務で使えるAndroidアプリ開発のノウハウを提供していきます。
前回の連載の今後を紹介し、アプリ間連携でさまざまなことができるACTION_OUTSIDEイベントの使い方を解説しました。
今回はAndroidアプリ開発において必ず押さえておかなければならないライフサイクルイベントについて解説します。対象はActivity、Fragment、View、Applicationの4つです。
また、ライフサイクルイベントを利用して、アプリの「状態」を保存/復元する方法についても解説します。
Activity、Fragmentのライフサイクルイベントは、それらを使用するに当たって一部は必ず使うことになります。普段から使っているライフサイクルイベント以外でも、「どのようなときに、どのようなイベントがコールバックされるのか」を押さえておくことで、必要な処理を必要なタイミングで行えるようになります。
Viewのライフサイクルイベントを使いこなせれば、見た目や挙動に柔軟性を持たせることができます。動的にサイズが決定するViewは、元のViewに対し何らかの描画を重ねたい場合などに有効です。
また、今回解説するアプリの「状態」とは、「SharedPreferencesを用いるデータの永続化」ではなく、「アプリのライフサイクルイベントで渡される『savedInstanceState』を用いたアプリの状態の保存と復元」です。
この「状態」(savedInstanceState)の保存と復元の仕組みを理解しておくと、アプリ内の画面遷移からの復帰やアプリのバックグラウンドからの復帰時などで、ユーザーに遷移前と同様の画面状態を表示できるようになるため、ユーザー体験が向上します。
今回もサンプルアプリがあります。以下はサンプルアプリを動作させた際の動画です。スクロールの状態や発番される番号が適切に保存/復元されていることが見て取れると思います。
今回のサンプルアプリの動作について説明します。
アプリ画面の大半を占めるログのような文字列が並んでいる部分が、FragmentとViewが動的に追加/削除されるLinearLayoutです。画面下部に並んでいるボタンは、FragmentとViewを動的に追加/削除するためのButtonです。
このアプリでは、Fragment、Viewが追加/削除される都度、またアプリが起動/終了/バックグラウンド化/フォアグラウンド化する都度、logcatにライフサイクルイベントを出力します。
このアプリだけのライフサイクルイベントを表示するには、「@IT」というタグでフィルタリングしてください。
アプリの状態を復元するために、開発者向けオプションで「アクティビティを保持しない」にチェックを入れてください。
このチェックを入れた状態でアプリをバックグラウンド化すると、Activity#onDestroyが呼び出されてActivityが破棄されていることが確認できると思います。
今回のサンプルアプリでは、復元するアプリの状態は、アプリ内部で持っているFragmentやViewの連番、FragmentやViewが表示しているテキスト、LinearLayoutのスクロール状態です。アプリの内部状態と表示状態の保存/復元ということになります。応用すれば、どのような状態でも保存/復元可能です。
サンプルアプリは以下よりダウンロードしてください。
ソースコードは以下レポジトリからクローンしてください。今回は「No02」にプロジェクトがコミットされています。
Copyright © ITmedia, Inc. All Rights Reserved.