当前位置:  开发笔记 > 编程语言 > 正文

Java静态变量变为null

如何解决《Java静态变量变为null》经验,为你挑选了1个好方法。

我有一个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 = ...
    }
    ....
}

小智.. 17

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



1> 小智..:

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


所以基本上如果我想拥有将持续应用程序整个生命周期的数据,我应该将它保存在一个文件中,这样我就可以在需要时获取它而不是全局保存它.如果你问我,这是相当愚蠢的,但我想我真的没有选择......
@LittleCodingFox有关详细信息,请参阅[此答案](http://stackoverflow.com/a/8023552/418609).有点主观地说这种机制是愚蠢的,不要忘记你是在有限的环境中运行; Android上有许多[存储选项](http://developer.android.com/guide/topics/data/data-storage.html).
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有