Уведомления Android DBite Android

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

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

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

Solutions Collecting From Web of "Уведомления Android DBite Android"

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

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

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

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

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

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

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

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

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

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