29900


Activityで共通のデータを管理するため以下のようなクラスを作成して行っています。

[code]

    public final class CommonData {
    
      public static String data1;
      public static String data2;
      public static String data3;
    
    }
    
[/code]

アプリをバッググラウンドに移動し、他アプリを起動してアプリに戻ると、  
Activityが破棄されていて、さらにstatic変数もnullになり、アプリが強制終了します。  
メモリが不足するとOSが勝手にActivityを破棄するのだと思いますが、  
static変数まで破棄するとは思いませんでした。

アプリで共通データの管理のやり方はどういった方法がありますでしょうか？

どうかアドバイスをよろしくお願い致します。


CC BY-SA 3.0
2016-10-24T09:41:52.723
29866
2016-11-07T15:15:46.867
7212
question
android
Activityで共通データの管理のやり方について


プリファレンス、ファイル、またはデータベースへ保存する方法をお勧めします。件数が少なければプリファレンスが一番良いでしょう。

プリファレンスは内部でxmlファイルとしてストレージに保存されるため、メモリ不足になってもデータが消えません。


CC BY-SA 3.0
2016-10-26T03:24:26.980
29900
2016-10-26T03:24:26.980
8795
29866
answer


AndroidOSではしばらく使われていないActivity(すでに完了されたであろうユーザ作業のActivity)を破棄するActivity管理がなされています。ただし、このケースはプロセスごとkillするものではありません。

static変数が初期化されているのはActivityの破棄によるものではなく、メモリ管理の観点でAndroidOSが重要でないと判断したプロセスをkillすることが原因です。  
このあたりは下記のページに詳しく記されています。  
<https://developer.android.com/guide/components/processes-and-threads.html>

アプリで共通のデータを管理する際には、データのライフサイクルも合わせて考えることをおススメします。  
アプリケーションプロセスに閉じたライフサイクルであればApplicationクラスに共通データを持たせたり,
オンメモリデータベースでキャッシュさせたりといった方法もあります。  
プロセスをまたぐものの、一時的な永続化でよければcacheディレクトリを使用するなども考えられます。ActivityのライフサイクルをまたぐものであればSavedInstanceStateも採用できます。  
<https://developer.android.com/training/basics/activity-
lifecycle/recreating.html>

永続化のための方法は色々とあります。最低限のことは下記のページにまとめられています。  
<https://developer.android.com/guide/topics/data/data-storage.html>

プリファレンスはプリファレンスに最適な用途があるので、件数で選ぶより保存されるデータの性質や用途にあわせて、選択されたほうがよいかと思います。


CC BY-SA 3.0
2016-11-07T15:15:46.867
30194
2016-11-07T15:15:46.867
15039
29866
answer