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