Singleton商店是否持久存在于BlackBerry Java中?

时间:2012-02-07 20:51:32

标签: blackberry java-me singleton persistence

我正在开发一个Blackberry Java应用程序,我需要在应用程序中更新计数,以便用户知道他们在手机上有多少通知。通知数量显示在图标旁边的主屏幕上。我跟踪图标变量的方式" iconCount"不同入口点之间是通过单身人士。即使用户打开和关闭设备,我也需要将此计数存在。因此,如果有7个可用的更新,则7将在他们检查应用程序之前显示。当设备关闭时,它不会重置为0.

作为测试,看看如果我将计数设置为7并通过模拟器关闭设备会发生什么;我按下电源按钮,直到它说明"关闭设备,按任意键中止"然后屏幕变黑了。我等了几秒钟再次按下了挂断按钮,模拟器通电后显示7个新通知。

这对我来说有点奇怪,我虽然你需要持久存储来完成这个?我是否正确关闭了设备,或者即使设备关闭后,单个插件实际上是否保持变量?

3 个答案:

答案 0 :(得分:4)

以这种方式关闭设备并不会真正关闭它,这就是你的单身人士保留其价值的原因。如果你希望值在重新启动或电池拉动时保持不变(真正关闭它),那么你将不得不把它放在持久存储中。

答案 1 :(得分:3)

静态成员(作为单例)在给定的应用程序中将是唯一的。但是因为BlackBerry Java实现是如此“特别”(至少可以说),对于每个备用入口点,您将拥有一个不同的“应用程序实例”,因此将创建您的单例的几个实例。

如果要在多个应用程序之间在运行时共享对象,则必须在RuntimeStore中发布它。如果您还需要持久性,请在较新的操作系统中使用PersistentStore或普通文件或sqlite数据库。

现在关于模拟器:不信任模拟器。关闭应用后,您的变量就会消失。即使您有后台进程,当您关闭设备时它也不再存在。在真实设备上进行测试。

请记住:BlackBerry不是Java。您会看到许多违反Java规范的行为(例如,Persistable接口未被继承的事实)因此习惯了它。

答案 2 :(得分:1)

Singleton设计模式中没有任何固有的东西会导致任何类型的持久性。也就是说,BlackBerry JVM或您的代码正在做一些特别的事情可能。没有代码示例,就不可能知道。

否则,当从内存中卸载单例(并且放在磁盘上)时,数据将会蒸发。

可能的情况是BlackBerry OS在关闭时基本上“休眠”并在启动时恢复应用程序内存状态。