Сценарий:
public class MyApplication extends Application{...}
Три действия, обзор, список и карта,
отображая те же данные, предоставляя только различные UI/UX.
Данные, передаваемые в Contentprovider db и часто обновляемые извне с помощью SyncAdapter,
часть другого приложения.
Чтение данных из Contentprovider в курсор.
Do cursor.setNotificationUri(),
чтобы заставить курсор прослушивать изменения db/Uri.
Alt1. Удерживайте курсор в MyApplication.
Обзор, список и карта затем запрашивает MyApplication для данных.
При изменении db в MyApplication содержится ссылка на каждую активность
и уведомляет их о необходимости снова запрашивать данные из MyApplication.
Alt2. Удерживайте один курсор в каждом действии.
При изменении db каждая операция снова запрашивает курсор для данных.
Где мы должны держать курсор (ы)?
Я столкнулся с аналогичной проблемой, но не с DB и курсором, а с простым веб-запросом\response.
Проблема, с которой вы столкнетесь достаточно скоро, - это то, что срабатывает, когда ваша деятельность умирает посреди ответа на запрос.
Я бы предложил следующее:
поэтому в основном у будет курсор в каждом действии, но не нужно управлять им по коду, если вам не нужно делать что-то, что не является стандартным для него. не забудьте убрать курсор после того, как активность замирает.
Application
живет вечно. На реальном устройстве это может быть убито как часть убийства фонового процесса. Например, если вы получаете входящий телефонный звонок, то ваше приложение переходит в фоновый режим. Процесс вашего приложения будет восстановлен, когда приложение снова появится на переднем плане (телефонный звонок завершен). При восстановлении экземпляр Application
будет воссоздан, однако только вы отвечаете за обработку его состояния, например, если у вас есть какое-то поле в экземпляре Application
и это поле было установлено какой-то другой частью приложения, то теперь вы можете получить null
там вместо этого.