2012-02-07 52 views
1

我正在開發黑莓Java應用程序,我需要在應用程序中更新計數,以便用戶知道他們在手機上有多少通知。通知的數量顯示在圖標旁邊的主屏幕上。我跟蹤不同入口點之間的圖標變量「iconCount」的方式是通過一個單例。即使在用戶關閉他們的設備後,我也需要將此計數存在。因此,如果有7個可用的更新7,它們將顯示直到他們檢查應用程序。設備關閉時,它不會重置爲0。單一商店在BlackBerry Java中持久存在嗎?

作爲測試,看看如果將計數設置爲7並通過模擬器關閉設備會發生什麼;我按住電源按鈕,直到它顯示「關閉設備,按任意鍵中止」,然後屏幕變黑。我等了幾秒鐘,然後再次按下掛斷按鈕,模擬器啓動以顯示7個新通知。

這對我來說有點奇怪,我雖然需要持久存儲來完成這個任務嗎?我是否正確關閉了設備,或者即使設備關閉後,單個設備是否仍然保存着變量?

回答

3

靜態成員(作爲單例)在給定應用程序內將是唯一的。但是由於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

1

Singleton設計模式中沒有任何固有的東西會導致任何類型的持久性。也就是說,這是可能的,說明BlackBerry JVM或者你的代碼做了一些特別的事情。沒有代碼示例,就不可能知道。

否則,當單例從內存中卸載(並且不是放在磁盤上)時,數據將會蒸發。

的可能的情況是,黑莓OS基本上是「冬眠」,它會關閉和啓動恢復應用程序的內存狀態時。

4

以這種方式關閉設備並不能真正關閉設備,這就是爲什麼您的單件保留其價值。如果您希望該值能夠在重新啓動或電池吸合時持續存在(這實際上將其關閉),那麼您將不得不將其放入持久存儲中。

+0

感謝您的回覆理查德,你有機會知道我可以模擬關閉模擬器以測試持久存儲嗎?它會簡單地關閉模擬器窗口,然後再次啓動它? – user1152440 2012-02-08 14:16:51

+0

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

+0

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