Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java静态变量变为null_Java_Android - Fatal编程技术网

Java静态变量变为null

Java静态变量变为null,java,android,Java,Android,我有一个android java类,它有一个静态实例,保存着用户的信息。然而,在一些罕见的情况下,当用户使用我的应用程序时,静态实例中的一个变量在一段时间后变为null。这个java类是全局的(不附加到任何活动)。这可能是什么原因造成的 编辑:除非在应用程序启动期间,否则永远不会更改变量。我已经检查过调用它的函数不会被调用超过一次(当我添加一个日志声明它正在被调用时,adb logcat证明了这一点) 代码如下所示: class UserCore { class UserData

我有一个android java类,它有一个静态实例,保存着用户的信息。然而,在一些罕见的情况下,当用户使用我的应用程序时,静态实例中的一个变量在一段时间后变为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 = ...
    }
    ....
}

如果用户让手机进入睡眠状态,系统需要或清除内存,通常会发生这种情况。最好将需要较长时间的信息保存到磁盘缓存中,而不仅仅是保存在静态变量中。正如您所知,Android系统在何时清除应用程序上拥有最终决定权,只需在静态变量中保存短时间交互所需的数据。

此处需要一些代码。应用程序重新启动?Android应用程序有时会消失。它可能会在某个地方变为空:)因此,基本上,如果我想拥有能够持续整个应用程序生命周期的数据,我应该将其保存在一个文件中,以便在需要时随时获取,而不是全局保存。如果你问我,那是相当愚蠢的,但我想我真的没有选择…@LittleCodingFox查看更多信息。说这种机制很愚蠢有点主观,别忘了你是在有限的环境中运行的;在Android.Android上有很多关于LRUCache
的文档,当一个值被添加到一个完整的缓存中时,该队列末尾的值会被逐出,并且可能会被垃圾收集。