单一商店在BlackBerry Java中持久存在吗?

问题描述:

我正在开发黑莓Java应用程序,我需要在应用程序中更新计数,以便用户知道他们在手机上有多少通知。通知的数量显示在图标旁边的主屏幕上。我跟踪不同入口点之间的图标变量“iconCount”的方式是通过一个单例。即使在用户关闭他们的设备后,我也需要将此计数存在。因此,如果有7个可用的更新7,它们将显示直到他们检查应用程序。设备关闭时,它不会重置为0。单一商店在BlackBerry Java中持久存在吗?

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

这对我来说有点奇怪,我虽然需要持久存储来完成这个任务吗?我是否正确关闭了设备,或者即使设备关闭后,单个设备是否仍然保存着变量?

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

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

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

切记:BlackBerry不是Java。你会看到许多违反Java规范的行为(例如,Persistable接口没有被继承),所以习惯了它。

+0

这是相当丰富的,我现在一直在尝试使用黑莓教程A13:永久存储:http://supportforums.blackberry。com/t5/Java-Development/Storing-persistent-data/ta-p/442747,这是我应该采取的持续分享变量的特定路径吗? – user1152440 2012-02-08 17:23:41

+0

存储单个对象比存储集合更容易,如示例中所示。你只是让类实现Persistable,定义一个唯一的长ID来存储/从PersistentStore检索你的对象,并确保对象成员也是Persistable(最原始的类型,Vector,Hashtable)。为了检索,调用'PersistentStore.getPersistentObject(ID)'。要坚持,请调用'PersistentObject.setContent'和'PersistentObject.commit'。 – 2012-02-08 17:31:48

+0

非常感谢Smith先生,非常感谢 – user1152440 2012-02-08 17:40:00

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

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

的可能的情况是,黑莓OS基本上是“冬眠”,它会关闭和启动恢复应用程序的内存状态时。

以这种方式关闭设备并不能真正关闭设备,这就是为什么您的单件保留其价值。如果您希望该值能够在重新启动或电池吸合时持续存在(这实际上将其关闭),那么您将不得不将其放入持久存储中。

+0

感谢您的回复理查德,你有机会知道我可以模拟关闭模拟器以测试持久存储吗?它会简单地关闭模拟器窗口,然后再次启动它? – user1152440 2012-02-08 14:16:51

+0

@ user1152440是 – 2012-02-08 14:37:19

+0

感谢您的回答家伙 – user1152440 2012-02-08 17:03:20