Это означает,
Предположим, у вас есть запрос ниже
@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номер