2013-05-24 12 views
9

ユーザーに情報を保持する静的インスタンスを持つAndroid Javaクラスがあります。しかし、ユーザーが私のアプリケーションを使用しているまれなケースでは、静的インスタンス内の変数の1つがしばらく後にnullになります。このJavaクラスはグローバルです(アクティビティにはアタッチされていません)。これを引き起こす原因は何ですか?Java静的変数がnullになる

EDIT:この変数は、アプリケーションの起動時以外は変更されません。私はすでにそれを呼び出す関数が複数回呼び出されることはないことを確認しています(adb logcatは呼び出されたというログを追加したときにそのことを証明します)。ユーザーがスリープ状態に入ると、システムが必要とするか、またはメモリをクリアし、電話をすることができます場合、これは一般的に起こる

class UserCore 
{ 
    class UserData 
    { 
     int ID; 
     string Name; 
    } 

    public UserData User; 
    public static UserCore Instance = new UserCore(); 

    public void Login() 
    { 
     Log.d("User", "Logging in"); 
     new Throwable().printStackTrace(); 

     User = null; 
     //Fetch user data 
     User = new UserData(); 
     User.ID = ... 
     User.Name = ... 
    } 
    .... 
} 
+9

ここにコードが必要です。 – Woot4Moo

+0

アプリが再起動しますか? Androidアプリは時々外出します。 –

+0

おそらくどこかでnullになるでしょう:) – Maroun

答えて

15

コードは次のようなものです。より長期間に渡って必要となる情報を静的変数に保持するのではなく、ディスクキャッシュに保持することが最善です。 Androidシステムでは、いつアプリをクリアするかについて最終的な判断をしていることがわかるので、静的変数には非常に短いインタラクションのために必要なデータだけを保持してください。

+2

基本的に、アプリケーションの全ライフを持​​続させるデータが必要な場合は、ファイルに保存する必要があるため、グローバルに保持するのではなく、必要なときにフェッチできます。あなたが私に尋ねるならば、それはむしろばかげたことですが、私は実際には選択肢がないと思います... –

+2

@LittleCodingFox詳細については、[この回答を参照](http://stackoverflow.com/a/8023552/418609)を参照してください。このメカニズムが愚かだと主観的に言うと、限られた環境で走っていることを忘れないでください。 Androidには多くの[保存オプション](http://developer.android.com/guide/topics/data/data-storage.html)があります。 – adrianp

+1

http://portabledroid.wordpress.com/2012/05/04/singletons-in-android/ –