15

ユーザーに関する情報を保持する静的インスタンスを持つ Android Java クラスがあります。ただし、ユーザーが私のアプリを使用している場合、まれに、その静的インスタンス内の変数の 1 つがしばらくすると null になります。この Java クラスはグローバルです (どのアクティビティにも関連付けられていません)。何が原因でしょうか?

編集:アプリの起動時を除いて、変数は決して変更されません。それを呼び出す関数が複数回呼び出されることはないことを既に確認しました(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 = ...
    }
    ....
}
4

1 に答える 1

19

これは通常、ユーザーが電話機をスリープ状態にさせ、システムがメモリを要求またはクリアした場合に発生します。長期間にわたって必要となる情報は、単に静的変数に保持するのではなく、ディスク キャッシュに保持することをお勧めします。Android システムがアプリをいつクリアするかについて最終的な決定権を持っていることはご存知のとおり、静的変数での非常に短い対話に必要なデータのみを保持します。

于 2013-05-24T13:34:55.787 に答える