Android - 为什么Application中定义的全局变量变为空?

时间:2015-06-16 22:38:33

标签: android memory

使用Crashlytics我已经意识到我的应用程序中发生的一些崩溃似乎与应用程序运行时变为null的全局变量有关。

我已经阅读了以下两个堆栈流,但我不确定它们是否完全适用于我的情况(尽管可能有人可以指出它们是如何做的):

Android :Declared Global variables becoming null while running the app?

Global variable becomes null sometimes

首先,该应用程序的设计不是为了运行"在后台。我知道当主页按钮被击中时它会继续在后台运行,但它不能从后台拉回到操作中,而是你被迫重启应用程序。因此,我不认为这是应用程序全局内存被释放的问题,除非在重新启动时它尝试使用在后台运行的旧版本(并且在某些设备上它似乎只是消失了)。 / p>

其次,我无法复制在我的任何设备上释放的内存错误。它似乎几乎发生在应用程序的各个随机位置,尽管很少。我试过让它进入睡眠状态,重新运行,唤醒它,重新安装,我能想到的一切都没有成功。

第三,如果确实发生了这种情况,是否有办法将全局内存恢复到原来的状态,以及一些会触发我保存它的事件以及重新建立它的事件?

之前的博客已经讨论过低功耗设备,或者内存不足的设备可能导致此问题。但在看它时,这些设备似乎还有很多电池。他们是否有可能在后台运行许多其他应用程序来咀嚼内存导致我的应用程序内存集合?

以下是正在使用的全局内存类的示例...

public class GlobalState extends Application {

    public Form currentForm = null;
    public int currentUserId = -1;
    public int currentAccountId = -1;
    public int currentSubformIndex = 0;
    public Context context = null;
    public AndroidLogger logger = null;

    private static GlobalState instance;

    public static GlobalState getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this; 
        instance.context = getApplicationContext();
        logger = AndroidLogger.getLogger(getApplicationContext(), "xxxxxxxxxxxxxxxxx");
    }

}

请原谅我,如果这是非常明显的事情,对Android来说还是一个新手

1 个答案:

答案 0 :(得分:-1)

https://stackoverflow.com/a/8023552可能包含您感兴趣的一些信息。也许你的应用程序有onPause()然后调用onReusme(),并且你没有正确地将状态保存到Bundle?如果您尝试覆盖onSaveInstanceState方法,则可以确保这些变量不变。