【问题标题】:RoomDatabase notifying Flow when object not in query changed当不在查询中的对象发生更改时,RoomDatabase 通知流
【发布时间】:2021-01-30 14:05:28
【问题描述】:

我注意到 Room 正在通知订阅了 id X 元素的流对 id Y 元素的更改。我一直认为并发展认为只有查询中的项目会通知更改。我总是错了吗?我在房间 2.2.6 和最新的 beta 2.3.0 中发现了这种行为,所以我只能想象这不是错误?

【问题讨论】:

    标签: android android-room android-jetpack


    【解决方案1】:

    Room 中响应式更新的粒度是表格和连接表格。因此,如果您写入表,那么任何观察到给定表的查询都将失效并重新获取。

    【讨论】:

      【解决方案2】:

      您可以使用“Flow#distinctUntilChanged()”:

      db.getElementById(x.id).distinctUntilChanged().collect {
          // do something
      }
      

      这是 Google 开发倡导者 Florina Muntenescu 推荐的用法。你可以在这里阅读更多: https://medium.com/androiddevelopers/room-flow-273acffe5b57

      【讨论】:

      • 谢谢,有道理
      猜你喜欢
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2012-10-22
      • 2012-08-07
      • 2018-07-01
      • 2013-05-01
      • 2011-04-03
      • 2018-04-21
      相关资源
      最近更新 更多