小编sun*_*ade的帖子

Room LiveData 发射两次且发射一次过时

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

  • 与数据库操作之前对应的一个不正确的过时事件
  • 数据库操作后对应的第二个正确事件

我创建了一个非常简单的示例项目来演示该问题(示例中没有 MVVM 或多个片段)。这是示例应用程序的动画 GIF

在示例应用程序中,您可以使用以下步骤观察陈旧事件:

  • 使用观察按钮订阅房间实时数据
  • 使用 UNOBSERVE 按钮取消订阅 LiveData
  • 使用 ADD 按钮将元素插入 Room 数据库
  • 使用观察按钮订阅房间实时数据

然后可以看到有两个事件被触发。第一个已经陈旧了。

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

注意:有关如何在单个活动/多个片段架构中处理 LiveData 的背景信息,请参阅“3.重置现有观察者” 。我使用这种方法,导致了这个问题。

android viewmodel android-room android-livedata

5
推荐指数
0
解决办法
621
查看次数