質問: Activityで共通のデータを管理するため以下のようなクラスを作成して行っています。 ``` public final class CommonData { public static String data1; public static String data2; public static String data3; } ``` アプリをバッググラウンドに移動し、他アプリを起動してアプリに戻ると、 Activityが破棄されていて、さらにstatic変数もnullになり、アプリが強制終了します。 メモリが不足するとOSが勝手にActivityを破棄するのだと思いますが、 static変数まで破棄するとは思いませんでした。 アプリで共通データの管理のやり方はどういった方法がありますでしょうか? どうかアドバイスをよろしくお願い致します。
回答: AndroidOSではしばらく使われていないActivity(すでに完了されたであろうユーザ作業のActivity)を破棄するActivity管理がなされています。ただし、このケースはプロセスごとkillするものではありません。 static変数が初期化されているのはActivityの破棄によるものではなく、メモリ管理の観点でAndroidOSが重要でないと判断したプロセスをkillすることが原因です。 このあたりは下記のページに詳しく記されています。 アプリで共通のデータを管理する際には、データのライフサイクルも合わせて考えることをおススメします。 アプリケーションプロセスに閉じたライフサイクルであればApplicationクラスに共通データを持たせたり, オンメモリデータベースでキャッシュさせたりといった方法もあります。 プロセスをまたぐものの、一時的な永続化でよければcacheディレクトリを使用するなども考えられます。ActivityのライフサイクルをまたぐものであればSavedInstanceStateも採用できます。 永続化のための方法は色々とあります。最低限のことは下記のページにまとめられています。 プリファレンスはプリファレンスに最適な用途があるので、件数で選ぶより保存されるデータの性質や用途にあわせて、選択されたほうがよいかと思います。