Java - 我一直在丢失对Global类的引用

时间:2013-02-19 04:46:48

标签: java global

所以我有一个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 BView A就是GC了。

但是,Global.x不再有值。

这是Java的预期行为吗?如果是这样,我如何从View A为我的Global类分配一个变量,并确保在View A死后它仍然存在。

或者我只是在其他地方做错了什么?

我想我会问,以防万一我忽略了什么,但可能是后者。

2 个答案:

答案 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是(或使用)WeakReferenceView A或与其一起收集的垃圾。
  • View A有一个终结器,用于更改Global.x
  • 的值

这些声音都不可能(虽然我当然看不到你的代码)

我最好的选择是你应该去别处寻找错误。由于全局状态变量本身在某种程度上不是线程安全的,因此您的问题很可能与线程相关。