所以我有一个Global
类,它应该包含可以从我的所有文件中访问的各种数据。 Global
看起来像这样:
public class Global{
public static int rules = 0;
public static String data;
public static int score;
public static int speed = 0;
//etc...
}
我通过Global.x = ___
等来设置和解决问题。
但是,我最近清理了项目中的内存泄漏,我创建的视图(View A
)比预期的要长。
此View A
已分配Global.x
。
现在,一旦我转到View B
,View A
就是GC了。
但是,Global.x
不再有值。
这是Java的预期行为吗?如果是这样,我如何从View A
为我的Global类分配一个变量,并确保在View A
死后它仍然存在。
或者我只是在其他地方做错了什么?
我想我会问,以防万一我忽略了什么,但可能是后者。
答案 0 :(得分:3)
您所说的问题是缺少有助于您解决特定问题的事实。考虑粘贴您可以创建的最小的Java代码,以再现该问题。话虽如此,你的设计很糟糕,你应该考虑使用单身。
public class Global {
private Global INSTANCE = new Global();
private int speed;
private Global() {
// whatever you do to initialize...
speed = 65;
}
public Global getInstance() {
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
从您所处的任何范围,您都可以说:
Global.getInstance().getSpeed();
或
Global.getInstance().setSpeed(25);
等...
答案 1 :(得分:2)
除了设计问题;
我真的只有两种方法可以使View A
的垃圾收集对Global.x
的值产生影响;
Global.x
是(或使用)WeakReference到View A
或与其一起收集的垃圾。View A
有一个终结器,用于更改Global.x
。这些声音都不可能(虽然我当然看不到你的代码)
我最好的选择是你应该去别处寻找错误。由于全局状态变量本身在某种程度上不是线程安全的,因此您的问题很可能与线程相关。