【发布时间】:2014-04-14 18:47:13
【问题描述】:
我正在开发一款在 Android 上运行的带有 libGdx 的游戏。 我有一些与单例模式有关的情况。
在我的应用程序中,所有绘图调用都由一个名为“Spritepool”的类管理。 它在主线程上运行,进行纹理更新、排序、绘图……所以我把它做成了单例。
它几乎可以正常工作..但是退出一次后重新启动时应用程序崩溃。
我认为这是因为当应用再次启动时单例类 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() 日志消失,成员“调试”指向垃圾..(不是 new BitmapFont()..)
这是 android 上常见单例类的正常行为吗? (我认为不是......也许我在某处做错了) ..我应该怎么做才能使它正确? 任何建议将被认真考虑。谢谢。
【问题讨论】:
-
...您是否遇到任何错误/异常?
-
退出时没有异常,我认为它仍然在内存中的某个地方
-
单例对于一个进程来说是静态的,所以除非你最终得到一个新进程,否则它可能不会被更新。通常,重新启动 Android 活动将转到现有进程。但是,如果单个字段与不再存在的 Activity 或 View 或类似内容相关联,则可能包含不再可用的内容。
-
@ChrisStratton 我开始感觉到了……也许我应该检查退出呼叫……谢谢!!
-
等等......我正在使用很多枚举,也许所有这些枚举都有像这个这样的潜在问题,直到我修复这个......哇哦......
标签: java android constructor enums singleton