【问题标题】:Does a Singleton Store Persistently in BlackBerry Java?BlackBerry Java 中的单例存储是否持续存在?
【发布时间】:2012-02-08 23:05:07
【问题描述】:

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

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

这对我来说有点奇怪,我认为您需要持久存储来完成此操作?我是否正确关闭了设备,或者即使在设备关闭后,单例实际上也持有变量?

【问题讨论】:

    标签: blackberry java-me singleton persistence


    【解决方案1】:

    以这种方式关闭设备并不能真正将其关闭,这就是您的单例保持其价值的原因。如果您希望该值在重新启动或电池拉动(实际上将其关闭)时保持不变,那么您必须将其放入持久存储中。

    【讨论】:

    • 感谢Richard 的回复,你知道我如何模拟关闭模拟器来测试持久存储吗?会不会只是简单地关闭模拟器窗口然后再次启动它?
    【解决方案2】:

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

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

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

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

    【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多