文章目录

避免接受到不相关的LiveData回调
首先我们要知道Room的实现机制

  1. 使用triggers监听到了表的增删改查
  2. Room创建了一个InvalidationTracker观察表是否发生改变
  3. InvalidationTracker.Observer#onInvalidated调用,通知Observer重新查询

Room只知道你的表发送了变化,但是不知道具体发生了什么变化,而且并不知道这些变化观察者是否关心。Room本身并不保存数据所以它也无法判断,观察者要的数据要否变化。

所以在实际使用中你需要自己过滤掉不需要的通知

1
2
3
4
5
6
7
@Dao
abstrat class UserDao : BaseDao<User>() {
@Query("SELECT * FROM Users WHERE userid = :id")
protected abstract fun getUserById(id : String) : Flowable<User>

fun getDistinctUserBy
}
文章目录