0

在这里,我编写了一个MutableLiveList<T>旨在MutableLiveData<MutableList<T>>在我的项目中替换的类。到目前为止,这工作正常。但是,如果在该活动处于非活动状态时对列表进行了多次修改,那么只有对该列表的最后一次修改才会触发适配器通知方法。在这种情况下,我不知道应用程序会崩溃。所以我需要准确地模仿这种情况。当屏幕旋转时,Activity 会被销毁并重新创建。但我不知道如何在该间隔之间将项目添加到该列表中。任何人请帮助我。或者告诉我一个更好的方法。

4

1 回答 1

0

您可以将它们添加到活动的onDestroy回调函数中。此时活动的Lifecycle对象处于CREATEDorDESTROYED状态:

生命周期对象的状态如何随应用生命周期事件变化的图表

关键是它当时不在STARTED状态,并且

LiveDataObserver如果其生命周期处于STARTEDor状态,则认为由类表示的观察者处于活动RESUMED状态。LiveData只通知活跃的观察者更新。注册以观察LiveData对象的非活动观察者不会收到有关更改的通知。

因此,当您进入 时onDestroy,任何使用该活动的观察者Lifecycle都不会看到来自LiveData. 因此,您应该能够在LiveData不收到通知的情况下向 中添加值。


顺便说一句,“仅通知最后一个值”更新是设计使然

通常,LiveData仅在数据更改时才提供更新,并且仅向活动的观察者提供。这种行为的一个例外是观察者在从非活动状态变为活动状态时也会收到更新。此外,如果观察者第二次从非活动状态变为活动状态,则仅当自上次激活后值已更改时,它才会收到更新。

因此,如果数据A, B, C在观察者处于非活动状态时发生,它将不会被通知这些值。当它从非活动状态变为非活动状态时,它将获得最新的值,C。它不会保存观察者错过的所有值的历史记录

于 2021-04-25T17:08:51.013 回答