我已将setPersistenceEnabled设置为true,并且我使用了一个addValueEventListener,并在其中使用了onDataChange方法。 每次调用该方法时,我的应用程序是否总是从服务器下载数据,或者如果可用,我的应用程序是否会从缓存中获取数据? 当我离线时,我确信数据来自缓存。
#askFirebase
答案 0 :(得分:2)
当您使用addValueEventListener()
附加侦听器且数据在本地磁盘缓存中可用时,onDataChange()
方法将立即触发缓存中的数据。
然后,Firebase客户端将向服务器注册以获取数据更新。只要它收到更新的数据,它就会再次调用onDataChange()
。
因此,如果您的本地磁盘缓存中存在过时数据,则可能会在“快速”连续中接收两次onDataChange()
调用:一个具有过时数据,另一个具有最新数据。目前无法查看数据是否陈旧。
当你真正创造一个棘手的情况时,唯一的一次是当你使用addListenerForSingleValueEvent()
时。由于您只会在那里获得第一个onDataChange()
事件,因此您可能只会获得过时的数据。这是我们建议不要将磁盘持久性与单值事件侦听器混合的原因之一。