2010-12-30 4 views
1

Сценарий:Архитектура Android: Где мы должны держать курсор?

public class MyApplication extends Application{...} 

три вида деятельности, Обзор, список и карта,
отображения же данные только предоставляет различный интерфейс/UX.

Данные, передаваемые в Contentprovider db и часто обновляемые извне с помощью SyncAdapter,
часть другого приложения.

Чтение данных из Contentprovider в курсор.
Сделайте курсор.setNotificationUri(),
, чтобы заставить курсор прослушивать изменения db/Uri.

Alt1. Удерживайте курсор в MyApplication.
Обзор, список и карта затем запрашивает MyApplication для данных.
В случае изменения смены базы данных MyApplication содержит ссылку на каждое действие
и уведомляет их о необходимости повторного запроса данных из MyApplication.

Alt2. Удерживайте один курсор в каждом действии.
При изменении db каждое действие снова запрашивает курсор для данных.

Где мы должны держать курсор?

+0

+1 +1 вопрос. Специфичность архитектуры Android - это действительно точка, которая будет обсуждаться глубже. –

ответ

1

Я столкнулся с аналогичной проблемой, но не с DB и курсором, а с простым веб-запросом \ ответом.
Проблема, с которой вы столкнулись достаточно скоро, - это то, что происходит, когда ваша деятельность умирает посреди ответа на запрос. Я хотел бы предложить следующее:

  1. сделать базовую активность u'll наследует от этого будет содержать курсор для запроса.
  2. убедитесь, что у вас есть способ заполнить данные о токе с данными в onResume начать слушать трансляцию приемник.
  3. , когда вы закончите обновление db в отдельной строке, сообщите об этом всем приемникам.
  4. Когда вы выполняете над созданием, проверьте данные в БД, чтобы узнать, пропустили ли вы звонок из эфира, потому что ваша деятельность скончалась.

поэтому в основном у вас будет курсор в каждом действии, но не нужно управлять им по коду, если вам не нужно делать что-то, что не является стандартным для него. не забывайте удалять курсор, как только действие умирает.

+0

Спасибо, я ценю ваш вклад. Основываясь на вашем ответе, я не уверен, что вы используете собственное приложение. Когда AndroidOS завершает работу Activity, приложение все еще живет. Если приложение содержит курсор, мы будем запрашивать только один раз, но удерживать ссылки на «Действия».Если в Деяниях есть один курсор, мы будем использовать больше ресурсов db, но никакая связь. Приложение <-> Активность существует. Мой вопрос связан с недостатками и преимуществами обоих подходов. – user77115

+0

Не предполагайте, что 'приложение' живет навсегда. На реальном устройстве его можно убить как часть убийства фонового процесса. Например, если вы получаете входящий телефонный звонок, ваше приложение будет в фоновом режиме. Процесс вашего приложения будет восстановлен, когда приложение снова появится на переднем плане (телефонный звонок завершен). При восстановлении экземпляр «Приложение» будет воссоздан, однако только вы ответственны за обработку его состояния, например. если у вас есть какое-то поле в экземпляре 'Application', и это поле было установлено какой-то другой частью приложения, то теперь вы можете вместо этого получить« null ». –

Смежные вопросы