Синхронизация обновлений базы данных с объектами
Допустим, у нас есть репозиторий, класс, в котором объявлена переменная типа LiveData и ей присваивают запрос из базы данных, например:
val allWords: LiveData< List< Word > > = wordDao.getAlphabetizedWords()
где - wordDao - объект интерфейса Dao, в котором описаны все запросы к БД. Причем функция возвращает объект LiveData.
Вопрос такой: если изменить что-то в БД, в переменной allWords тоже произойдут эти изменения даже после присваивания? Если да, то расскажите пожалуйста почему так получается. Ведь присваивание происходит всего 1 раз в объявлении переменной. Заранее спасибо за ответ.
Ответы (1 шт):
Вся магия происходит на этапе кодогенерации. Когда вы собираете проект у вас генерируются классы, расширяющие/реализуйющие Dao классы/интерфейсы. В реализациях генерируется код, который уведомляет об изменения данных в БД всех, кто в этом заинтересован. В случае с LiveData после изменения данных будет вызван колбэк оной, куда придут новые данные, после того, как запрос будет повторён из-за сигнала Room об изменениях.
Непосредственную логику всего этого вы можете посмотреть в IDE, начиная с класса, реализующего ваш Dao класс.