Хорошее исследование, много интересных мыслей.
Я думаю, что лучше всего попробовать простые стандартные подходы и только сделать что-то более сложное, если вам нужно.
Вот два варианта, которые будут рассматриваться как «стандарт», с краткими преимуществами и недостатками:
а) Сделайте UIApplication перейти на фоне
Вместо того, чтобы выходить, когда пользователь нажимает кнопку «Закрыть ', ваш UiApplication будет «requestBackground()». он будет автоматически загружен на передний план, когда пользователь нажимает на значок или выбирает ваше приложение из переключателя задач. Затем вы можете запускать поток каждый раз, когда захотите, или фактически оставить один запуск обновления базы данных.
Это мой предпочтительный метод. Но вы должны быть осторожны с управлением памятью, чтобы убедиться, что утечек нет. И некоторым людям не нравится идея, что приложение видимо на коммутаторе задач все время.
б) Alternate запись
С этой опцией, ваш один пакет приложений содержит два приложения, или более точно, одно приложение и один UIApplication. UiApplication запускается, когда пользователь нажимает на значок. Приложение запускается в качестве фоновой задачи и обновляет базу данных для вашего UiApplication.
Это выглядит как более элегантное решение, но представляет некоторые возможные проблемы с коммуникацией, и его сложнее отлаживать.
В вашем случае, поскольку вы относительно новичок в BB, я бы предположил, что вы используете опцию a, и если вы обнаружите, что это не сработает для вас, вы не найдете этого сложного для замены на вариант b.
А комментировать варианты вы уже представили:
- Сорт покрыты вариант б
- Вариант А
- Вы правильно - Если выход из приложения, все нити убивают
- Лишает проблему создания приложения в первую очередь, а затем отлаживает его. Это не решение для вас, а скорее метод реализации.
Вышеприведенное краткое изложение, пожалуйста, спросите, не ясно ли это. Это может помочь с Ь: http://supportforums.blackberry.com/t5/Java-Development/Set-up-an-alternate-entry-point-for-an-application/ta-p/444847
Edit:
Редактирование этого, чтобы ответить на вопросы и расширить на альтернативный ответ, который расширил на этом (немного круговое я знаю ...).
Чтобы ответить на второй вопрос, я согласен с другим ответом, в котором говорится, что альтернативная запись (фон) и приложение переднего плана могут совместно использовать базу данных SQLite.
Что касается того, как эти два человека взаимодействуют, хотя они работают очень хорошо, я лично не являюсь большим поклонником глобальных событий, потому что они распространяются на все приложения на BlackBerry. Вы можете добиться схожих вещей многими альтернативными способами - трюк заключается в том, чтобы найти то, что является общим для обоих приложений, чтобы они могли общаться. С этой целью я рекомендую использовать RuntimeStore. Смотрите эту статью KB:
http://supportforums.blackberry.com/t5/Java-Development/Create-a-singleton-using-the-RuntimeStore/ta-p/442854
касается того, как вы будете продолжать свою базу данных, мне нравится PersistentStore, потому что он присутствует на всех устройствах. Но если у вас действительно есть база данных, а не постоянные объекты, то SQLite кажется идеальной практикой. Лично я бы не использовать RecordStore, но здесь идет обсуждение вариантов:
http://supportforums.blackberry.com/t5/Java-Development/Introduction-to-Persistence-Models-on-BlackBerry/ta-p/446810
И только уточнение - в данном примере, у вас есть два приложения, BgApp и UiApp. У вас будет только один метод main(). Этот основной метод будет использовать аргументы, которые вы указываете, чтобы определить, какой из них будет запускаться, который он будет создавать, и заставить его «войти в диспетчер». Если бы я мог сделать рекомендацию - используйте «gui» в качестве аргумента, чтобы указать, что вы запустите свой UiApplication. Я столкнулся с тем обстоятельством, что ОС пыталась запустить мое альтернативное приложение Ui с этой строкой, независимо от того, что я на самом деле указал. Возможно, это было одно, но я с тех пор придерживаюсь этого.
Наконец, два комментария к использованию таймеров и Timertask для обеспечения инициированных событий. Первый комментарий, который вы делаете, - это то, что вы запускаете в TimerTask, не должно длиться так долго, поэтому вы должны просто использовать TimerTask, чтобы инициировать загрузку Thread (что может занять много времени). Во-вторых, для меня в этой ситуации я бы не использовал Timer/TimerTask. Я бы предпочел только один поток, который «ждет», а затем обрабатывает. Преимущество для меня в том, что это может быть адаптивным. Например, если вы не можете подключиться, вы можете сократить время до следующей попытки подключения. Или, если это происходит через несколько часов, вы можете увеличить время между соединениями, чтобы уменьшить потребление батареи. Или вы можете полностью отключиться, когда батарея будет очень низкой.
Надеюсь, что это поможет.
Спасибо за ответ: можете ли вы предоставить некоторую ссылку или информацию о том, как приложение UIApplication и non UI может использовать одну и ту же базу данных? –
@ RachitaNanda Это происходит автоматически. Вам ничего особенного не нужно делать. Время выполнения BlackBerry не будет различать приложения Ui и non Ui, поэтому к одной базе данных можно получить доступ из обоих приложений. Оформить заказ http://docs.blackberry.com/en/developers/deliverables/29299/Storing_objects_persistently_1554312_11.jsp для получения информации о том, как создавать и использовать постоянство. – adwiv
@ adwiv Спасибо, но у меня есть большая реляционная база данных, поэтому я буду использовать sqlite. Возможно, это совместное использование базы данных для sqllite? –