Android 即使本地缓存可用且未更改,Firebase单值侦听器也会调用服务器
我的Firebase数据库已设置PersistenceEnabled=true。脱机时,所有侦听器都可以正常工作,并从本地缓存获取数据 但是,在线时,Firebase每次在同一节点上使用addListenerForSingleValueEvent时都会进行网络调用,即使我有一个本地缓存并且服务器上没有任何更改 在将侦听器连接到的节点上有两个项目,在将日志级别设置为debug之后,我看到以下报告。这种网络活动在我每次在线使用监听器时都会重复,即使是在亚秒的延迟内。我的理解是,如果Firebase有本地数据,则不会进行服务器调用。任何同步检查都可能在后台进行,并且网络使用效率很高 conn_18-收到的数据消息:{r=20,b={s=ok,d={}Android 即使本地缓存可用且未更改,Firebase单值侦听器也会调用服务器,android,firebase,firebase-realtime-database,network-traffic,Android,Firebase,Firebase Realtime Database,Network Traffic,我的Firebase数据库已设置PersistenceEnabled=true。脱机时,所有侦听器都可以正常工作,并从本地缓存获取数据 但是,在线时,Firebase每次在同一节点上使用addListenerForSingleValueEvent时都会进行网络调用,即使我有一个本地缓存并且服务器上没有任何更改 在将侦听器连接到的节点上有两个项目,在将日志级别设置为debug之后,我看到以下报告。这种网络活动在我每次在线使用监听器时都会重复,即使是在亚秒的延迟内。我的理解是,如果Firebase有
conn_18-收到的数据消息:{r=21,b={s=ok,d=}
我正在积极减少我的应用程序上的网络使用,任何停止/减少Firebase网络活动的建议都会非常有用。我自己一直在深入研究这个问题 据我所知,你正在经历的第二个电话只是网络上说“嘿,没有更新”,你不需要支付任何阅读费用 至于减少网络活动,我认为这就是它的工作方式,以及你希望它如何工作(它是听者的实际倾听部分)。如果您不想这样做,请使用getDocument调用,而不是侦听器 这是基于以下几点:
- 当您查看snapshot.metadata.isFromCache(iOS SDK)进行查询时,调用将出现两次。首先从缓存,然后从服务器。但是,如果打印snapshot.documentChanges下的语句,则仅打印缓存的调用
- 我做了一个实验,在iOS中重新加载了一个视图约20次。我还对我的数据做了一些小改动。然后,我等待了5-10分钟,查看了上的用法:。我的总阅读量增加了3,这意味着我只需要为更新付费。多次重新加载视图是不收费的