Android:アクティビティの破棄

Android アプリは、システムの制約により、バックグラウンドに移行した際に、アクティビティ(Android アプリにおける画面となるコンポーネント)が破棄される場合があります。

アクティビティが破棄された場合でもタスクにはアプリは残っており、アプリをフォアグラウンドに戻すと、画面の状態を復元しようとします。レイアウトファイルにて id を設定したUIコンポーネントは、自動的に復元されますが、インスタンスのメンバ変数は初期化されてしまうため、対応を入れる必要があります。

ビューモデルを使用する場合は、SaveStateHandle を使用して情報を保存・復元が可能です。 この動作を確認するためにサンプルを作成しました。 ソースコードは github にあります。

アクティビティが破棄される場合、アクティビティの onDestroy() でビューモデルを参照しようとすると java.lang.IllegalArgumentException: SavedStateProvider with the given key is already registered が発生することを確認しました。事前にビューモデルの onCleared() が呼び出されることから、アクティビティ破棄時の onDestroy() ではビューモデルの参照は避けたほうが良いのかもしれません。

学習,調査

Posted by hrk