Java单例类不会在Android上调用其构造函数

时间:2014-04-14 18:47:14

标签: java android constructor enums singleton

我正在开发一款在Android上运行的libGdx游戏。 我有一些与单身模式有关的情况。

在我的应用中,所有绘图调用都由一个名为“Spritepool”的类管理。 它运行在主线程上,进行纹理更新,排序,绘图......所以我把它变成了单身。

并且它几乎正常工作..但是在退出一次后重新启动应用程序崩溃。

我认为这是因为当app再次启动时,单例类Spritepool不会调用其构造函数...

将Spritepool更改为枚举单例不是解决方案。 我的Spritepool类看起来像这样..

public enum Spritepool {
    INSTANCE;

    BitmapFont debug = new BitmapFont();

    public static Spritepool get(){ return INSTANCE; }  
    Spritepool(){
        Gdx.app.log("sprite pool", "=== sprite pool constructor calling... ");
    }

    ...
    ...

    public void workingCodes(){...}
}

我现在已经从构造函数Spritepool()中删除了除日志之外的所有初始化。 首次启动应用程序时,构造函数的日志打印良好,成员“调试”实例化良好。 退出应用程序并重新启动后,所有应用程序循环正常工作,Spritepool()日志消失,成员“debug”指向垃圾..(不是新的BitmapFont()..)

这是android上普通单例类的正常行为吗? (我想不是......也许我在某处做错了) ..我该怎么做才能做到对? 任何建议将被认真考虑。感谢。

1 个答案:

答案 0 :(得分:0)

为什么使用枚举?

试试这个:

public class Spritepool {     私人Spritepool INSTANCE;

BitmapFont debug = new BitmapFont();

public static Spritepool get(){ 
     if (INSTANCE == null) INSTANCE = new Spritepool();
     return INSTANCE; 
}  
Spritepool(){
    Gdx.app.log("sprite pool", "=== sprite pool constructor calling... ");
}

...
...

public void workingCodes(){...}

}