Уведомления Android SQLite DB

Я пишу приложение для Android, которое необходимо уведомлять, когда вся база данных SQLite изменяется (любая новая строка добавлена, удалена или обновлена).

Есть ли какой-либо программный способ прослушивания этих уведомлений?

Является ли триггеры DB для каждой таблицы единственным способом?

Ответы

Ответ 1

SQLite предоставляет Обратные вызовы с изменениями данных. Я не думаю, что Android предоставляет их напрямую, но он имеет, например, CursorAdapter, который предоставляет некоторые уведомления об изменениях.

Как думает, однако, вы ожидаете, что ваша БД будет изменена вне сферы вашего собственного приложения?

Ответ 2

Вы можете зарегистрировать класс наблюдателя, например DataSetObserver

Затем всякий раз, когда вы что-то меняете, вы можете вызвать cursor.registerDataSetObserver(..) для регистрации изменений наблюдения.

Это не очень хорошо документировано, но я уверен, что есть несколько примеров

Ответ 3

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

Если вы управляете ContentProvider, который взаимодействует с БД, вы можете запустить Intent или использовать getContentResolver(). notifyChange, чтобы отправить специальный Uri уведомление, которое идентифицирует как таблицу, так и действие. Пример Uri, который вы могли бы уведомить, может быть: content://my-authority/change/table-name/insert

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

Кажется, что триггеры, которые записывают в таблицу журналов изменений, гарантируют, что вы услышите обо всех изменениях независимо от того, откуда они пришли, и вы можете узнать точный идентификатор и действие, которое произошло. К сожалению, это означает медленные вставки/обновления/удаления, и это означает, что вам, вероятно, нужна какая-либо Служба для обработки и удаления изменений.

Мне бы хотелось услышать, если это лучшее решение!