Room LiveData发射两次,发出过时的声音

时间:2018-09-19 22:56:39

标签: android viewmodel android-room android-livedata

最初在具有MVVM体系结构(单个活动/多个片段)的项目中观察到此问题,该操作是对数据库执行插入/删除操作,然后导航回原始片段。然后,主片段重新订阅到主ViewModel中的LiveData,并且LiveData发出两次:

  • 一个错误的过时事件,对应于数据库操作之前
  • 与数据库操作后相对应的第二个正确事件

我创建了一个very simple example project来演示该问题(示例中没有MVVM或多个片段)。 Here is an animated GIF of the example app

在示例应用程序中,您可以按照以下步骤观察到过时事件:

  • 使用“观察”按钮订阅Room LiveData
  • 使用UNOBSERVE按钮取消订阅LiveData
  • 使用ADD按钮将元素插入到Room数据库中
  • 使用“观察”按钮订阅Room LiveData

然后可以看到触发了两个事件。第一个是陈旧的。

也许有人知道如何确保在重新订阅LiveData之后仅触发一个正确的事件吗?

注意:有关如何在单个活动/多个片段体系结构中处理LiveData的背景,请参见"3. Resetting an existing observer"。我使用这种方法导致了这个问题。

0 个答案:

没有答案