静态变量正在被重置,原因不明

时间:2011-07-08 18:50:59

标签: java android variables static reset

我有一个名为'DataReference'的类,它有许多静态变量,在程序执行过程中可以被各种类访问。

我有一个变量'public static int particlePercent = 100;'只能从主菜单活动的'SettingView'活动中更改。

但是,当退出主菜单活动的'GameView'活动时,'particlePercent'变量总是重置为100,即使该值可能是从'SettingView'编辑的。

我希望变量保持不变,因为它是静态的,除了'SettingView'活动之外,不会在任何地方进行编辑。

如果您知道可能发生的事情,或者我是否需要进一步澄清情况,请告诉我。

感谢。

4 个答案:

答案 0 :(得分:2)

我已经遇到过这个问题很多次,虽然我不确定原因是否相同。 Android在内存不足时重置变量。此主题可能会对您有所帮助 - Android : Static variable null on low memory

答案 1 :(得分:2)

正如您在Android documentation的图表中所见,任何应用程序暂停,停止或销毁的进程都可能被杀死: diagram

当它被杀死时,所有类都从内存中删除,因此所有静态变量都会丢失,这可能会在您更改当前活动时立即发生。

要解决此问题,必须以某种方式保存此类变量,例如在Activity的onSaveInstanceState方法中。

答案 2 :(得分:0)

是否在单独的线程上设置?如果多个线程正在访问此值并且正在另一个线程上进行更改,则无法保证其他线程在没有同步访问的情况下将看到更改。

答案 3 :(得分:0)

静态变量属于一个类,而不属于该类的实例。

最初设定的值在哪里?

你有几个选项可以看看它是如何重置的。如果你想看看是什么重新设置它,或者它是否已经设置好了。

  1. 使变量成为静态但私有,并编写一个公共静态getter和setter。然后在setter中设置断点并进行调试。当它被设置时(如果它正在设置!),你可以查看堆栈,看看为什么它被设置,以及什么。
  2. 如果那不是你的一杯茶,你可以随时抛出异常并立即抓住它,然后打印堆栈痕迹。这将为您做同样的事情 - 向您显示调用堆栈,您可以看到正在重新设置它的代码。