这个问题最初是在一个具有 MVVM 架构(单活动/多个片段)的项目中在对数据库执行插入/删除操作然后导航回主片段时观察到的。然后,主页片段重新订阅主页 ViewModel 中的 LiveData,并且 LiveData 发出两次:
我创建了一个非常简单的示例项目来演示该问题(示例中没有 MVVM 或多个片段)。这是示例应用程序的动画 GIF
在示例应用程序中,您可以使用以下步骤观察陈旧事件:
然后可以看到有两个事件被触发。第一个已经陈旧了。
有人可能知道如何确保重新订阅 LiveData 后仅触发一个正确的事件吗?
注意:有关如何在单个活动/多个片段架构中处理 LiveData 的背景信息,请参阅“3.重置现有观察者” 。我使用这种方法,导致了这个问题。