我有一个带有静态实例的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 = ...
}
....
}
答案 0 :(得分:16)
如果用户让手机进入睡眠状态并且系统需要或清除内存,通常会发生这种情况。最好将需要较长时间的信息保存到磁盘缓存中,而不是仅将其保存在静态变量中。正如您所知,Android系统对何时清除应用程序有最终决定权,只保留在静态变量中进行非常短暂交互所需的数据。