Почему в платформе Android нет SqliteCursorLoader? Это будет похоже на CursorLoader, но вместо SQLite DB вместо Content Provider. Я нашел некоторые реализации в Интернете, и это кажется полезным.AOSP contrib: CursorLoader для Sqlite DB вместо ContentProvider
ответ
Почему в платформе Android нет SqliteCursorLoader?
Поскольку было бы очень сложно выполнить договор Loader
. Есть три вещи, которые Loader
должен быть в состоянии сделать:
сделать работу асинхронно. Это можно было бы обработать путем наследования от
AsyncTaskLoader
, поэтому здесь нет реальной проблемы.Сохраните загруженные данные при изменении конфигурации. Это обеспечивается каркасом, поэтому здесь нет реальной проблемы.
Автоматически доставлять обновленный контент при изменении содержимого.
Пункт №3, где проблема. Единственная причина, почему это работает с CursorLoader
, состоит в том, что система ContentProvider
уже имеет понятие ContentObserver
и уже ожидает, что провайдеры сделают соответствующие уведомления, чтобы система узнала об изменениях данных.
Таким образом, это не просто того, чтобы реализовать SQLiteCursorLoader
, но и того, чтобы убедиться, что везде, где вы изменить базу данных, вы поднимаете событие (например, с помощью LocalBroadcastManager
), что Loader
мог слушать, чтобы знать его необходимо запрашивать базу данных и доставлять свежие Cursor
.
Теперь, для внутренних целей проекта, вы можете отказаться от договора и пропустить пункт №3. Это здорово. Однако я бы не рекомендовал распространять такую реализацию (например, как проект с открытым исходным кодом) из-за этого ограничения. И вот почему я прекратил мой SQLiteCursorLoader
(за пределами общего мнения, что рамка Loader
является неудачной абстракцией).
@CommonsWare, одна из реализаций, которые я нашел, была ваша. Что-то добавить? Благодарю. –