Android 在Firebase中启用持久性时实际会发生什么?
当在iOS中为Firebase启用持久性时,我的观察者会发生什么情况,以及他们在技术层面上的表现如何 基于此,我有一个好主意,它应该如何在高级别上工作-Firebase本质上保留了一个缓存的数据副本,您可以在脱机时访问该副本 我不明白的是,我的观察者应该发射多少次,使用什么信息Android 在Firebase中启用持久性时实际会发生什么?,android,ios,firebase,firebase-realtime-database,Android,Ios,Firebase,Firebase Realtime Database,当在iOS中为Firebase启用持久性时,我的观察者会发生什么情况,以及他们在技术层面上的表现如何 基于此,我有一个好主意,它应该如何在高级别上工作-Firebase本质上保留了一个缓存的数据副本,您可以在脱机时访问该副本 我不明白的是,我的观察者应该发射多少次,使用什么信息 firebase是否总是先触发任何缓存数据(如果没有任何数据,则为null),然后触发服务器数据,从而触发我的观察者一次 或者,它是否只发送缓存数据(如果存在),然后发送服务器数据 在持久化模式下,observerSi
- firebase是否总是先触发任何缓存数据(如果没有任何数据,则为null),然后触发服务器数据,从而触发我的观察者一次
- 或者,它是否只发送缓存数据(如果存在),然后发送服务器数据
- 在持久化模式下,observerSingleValue和连续观察者的行为有什么区别吗
- Firebase正在发送服务器数据
- Firebase发送缓存数据(如果存在),然后发送服务器数据
- Firebase发送缓存数据,如果缓存数据不存在,则为null,后跟服务器数据
把这件事弄清楚会很好,这样我们就知道哪些应该是正常的行为:)其实很简单。连接观察者时(无论是使用
observeEventType
还是observeSingleEventOfType
),Firebase将:
- 如果缓存数据已完成,我们将只引发带有缓存数据的事件。这意味着:
- 如果我们没有缓存数据(您以前没有观察到这个位置),我们将不会引发null或类似的事件。在我们从服务器获取数据之前,您不会获取任何事件
- 如果您有此位置的部分数据(例如,您以前观察过/foo/bar,但现在正在观察/foo),您将获得完整子项的
事件(例如/foo/bar),但不会获得ChildAdded
事件(例如/foo)直到我们从服务器上得到你所观察位置的完整数据值
- 如果您使用的是
,那么您只需要显式请求一个事件,因此,如果您有缓存数据,则会发生1,但不会发生2,这可能不是您想要的(您永远不会看到最新的服务器数据)observeSingleEventOfType
希望这有帮助 感谢Micheal,我注意到了一种情况,即缓存数据为null,尽管以前没有观察到过。所以我将把它报告为一个bug谢谢:)。是的,听起来确实可能是一个bug。如果你能为我们提供一种复制这种行为的方法,那就太好了。我确实忘记提到的一件事是,缓存数据可以来自我们以前从服务器收到的数据,也可以来自您在本地编写的数据。因此,如果您在代码中设置了(null),我们现在将为该位置缓存null,即使我们从未从服务器获取数据。如何使用
observeSingleEventOfType
从服务器获取最新数据?我已启用persistenceEnabled,只想获取一次最新数据,但如果需要,则不使用缓存的数据online@swalkner这是不可能的,我只能使用最新的更新。