Постоянно ли магазин Singleton хранится в BlackBerry Java? - PullRequest
1 голос
/ 08 февраля 2012

Я занимаюсь разработкой Java-приложения для Blackberry, и мне нужно, чтобы в приложении был счетчик обновлений, чтобы пользователь знал, сколько у него уведомлений на телефоне. Количество уведомлений отображается на главном экране рядом со значком. Я отслеживаю переменную icon "iconCount" между разными точками входа через единый пакет. Мне нужно, чтобы этот счет присутствовал даже после того, как пользователь выключил и включил свое устройство. Поэтому, если для них доступно 7 обновлений, 7 будут отображаться до тех пор, пока они не проверит приложение. Когда устройство выключено, оно не сбрасывается в 0.

В качестве теста, чтобы увидеть, что произойдет, если я установлю счет на 7 и выключу устройство через симулятор; Я удерживал кнопку питания до тех пор, пока не было указано «выключите устройство, нажмите любую клавишу для отмены», затем экран погас. Я подождал несколько секунд и снова нажал кнопку зависания, и симулятор включился, чтобы показать 7 новых уведомлений.

Это немного странно для меня, хотя вам нужно постоянное хранилище для этого? Правильно ли я выключал устройство, или же переменная фактически удерживает переменную даже после выключения устройства?

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

Выключение устройства таким способом на самом деле не выключает его, поэтому ваш синглтон сохраняет свою ценность. Если вы хотите, чтобы значение сохранялось при перезагрузке или при извлечении аккумулятора (что действительно отключает его), вам придется поместить его в постоянное хранилище.

3 голосов
/ 08 февраля 2012

Статический член (как синглтон) будет уникальным внутри данного приложения. Но поскольку реализация BlackBerry Java настолько «специфична» (если не сказать больше), для каждой альтернативной точки входа у вас будет свой «экземпляр приложения», поэтому будет создано несколько экземпляров вашего синглтона.

Если вы хотите поделиться объектом во время выполнения между несколькими приложениями, вы должны опубликовать его в RuntimeStore. Если вам также нужно постоянство, используйте PersistentStore, или простые файлы, или базы данных sqlite в более новых ОС.

А теперь о симуляторе: не доверяйте симулятору . Как только вы закроете приложение, ваши переменные исчезнут. Даже если у вас есть фоновый процесс, при выключении устройства оно больше не будет существовать. Тест на реальном устройстве.

Помните: BlackBerry - это не Java. Вы увидите много нарушений Спецификации Java (например, тот факт, что интерфейс Persistable не наследуется), так что привыкните к нему.

1 голос
/ 08 февраля 2012

Ничто не присуще шаблону проектирования Singleton, которое вызывает какое-либо постоянство. Тем не менее, возможно , что BlackBerry JVM или ваш код делает что-то особенное. Без примера кода это невозможно узнать.

В противном случае, когда синглтон выгружается из памяти (а не помещается на диск), данные будут испаряться.

Вероятный случай, когда ОС BlackBerry по существу "спит", когда она выключается и восстанавливает состояние памяти приложения при загрузке.

...