首页 > 解决方案 > 基于表修改的房间检查失效

问题描述

注意:Room 根据表修改检查失效,这意味着它可能会发送误报通知。应用架构指南

什么是失效Room?它如何导致误报通知?

标签: androidandroid-room

解决方案


这意味着,

假设您有以下查询

@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 会知道某些内容已更改,但不知道已更改的内容,因此它只会重新查询并再次发送结果。

为了绕过这个误报通知,您可以使用MediatorLiveDatawhen you have LiveDataas return type 或distinctUntilChangedif you are have RxJavaas return type in your Daos。

参考:房间的 7 个专业提示


推荐阅读