Комната проверяет недействительность на основе модификаций таблицы - PullRequest
0 голосов
/ 03 декабря 2018

Примечание: Комната проверяет недействительность на основе модификаций таблицы, что означает, что она может отправлять ложные положительные уведомления. Руководство по архитектуре приложения

Что такое аннулирование для Room?Как это вызывает ложные положительные уведомления?

1 Ответ

0 голосов
/ 04 декабря 2018

Это означает,

Предположим, у вас есть запрос ниже

@Query(“SELECT * FROM Users WHERE userId = :id)
fun getUser(id: String): LiveData<User>

И вы наблюдаете это как

getUser("id_1").observe(this, Observer{
    // do something 
})

В вышеуказанном методе нет ничего плохого, ноесть случай ложных положительных уведомлений.

Теперь предположим, что откуда-то еще вы удалили пользователя с userId = "id_2".На данный момент вы знаете, что вам не нужно получать уведомление о вашем предыдущем вызове getUser("id_1"), поскольку он не имеет никакого отношения к вашим операциям на id_2.Но вы все равно получите уведомление, и ваш // do something снова запустится.Это потому, что Room будет знать, что что-то было изменено, но не знает, что было изменено, и, следовательно, он просто повторно запросит и отправит результат обратно.

Чтобы обойти это ложное положительное уведомление, вы можете использовать MediatorLiveData, если у вас есть LiveData в качестве типа возврата, или distinctUntilChanged, если у вас есть RxJava в качестве типа возврата в вашем Daos.

Ref: 7 Pro-tips forномер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...