Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 即使本地缓存可用且未更改,Firebase单值侦听器也会调用服务器_Android_Firebase_Firebase Realtime Database_Network Traffic - Fatal编程技术网

Android 即使本地缓存可用且未更改,Firebase单值侦听器也会调用服务器

Android 即使本地缓存可用且未更改,Firebase单值侦听器也会调用服务器,android,firebase,firebase-realtime-database,network-traffic,Android,Firebase,Firebase Realtime Database,Network Traffic,我的Firebase数据库已设置PersistenceEnabled=true。脱机时,所有侦听器都可以正常工作,并从本地缓存获取数据 但是,在线时,Firebase每次在同一节点上使用addListenerForSingleValueEvent时都会进行网络调用,即使我有一个本地缓存并且服务器上没有任何更改 在将侦听器连接到的节点上有两个项目,在将日志级别设置为debug之后,我看到以下报告。这种网络活动在我每次在线使用监听器时都会重复,即使是在亚秒的延迟内。我的理解是,如果Firebase有

我的Firebase数据库已设置PersistenceEnabled=true。脱机时,所有侦听器都可以正常工作,并从本地缓存获取数据

但是,在线时,Firebase每次在同一节点上使用addListenerForSingleValueEvent时都会进行网络调用,即使我有一个本地缓存并且服务器上没有任何更改

在将侦听器连接到的节点上有两个项目,在将日志级别设置为debug之后,我看到以下报告。这种网络活动在我每次在线使用监听器时都会重复,即使是在亚秒的延迟内。我的理解是,如果Firebase有本地数据,则不会进行服务器调用。任何同步检查都可能在后台进行,并且网络使用效率很高

conn_18-收到的数据消息:{r=20,b={s=ok,d={}
conn_18-收到的数据消息:{r=21,b={s=ok,d=}


我正在积极减少我的应用程序上的网络使用,任何停止/减少Firebase网络活动的建议都会非常有用。

我自己一直在深入研究这个问题

据我所知,你正在经历的第二个电话只是网络上说“嘿,没有更新”,你不需要支付任何阅读费用

至于减少网络活动,我认为这就是它的工作方式,以及你希望它如何工作(它是听者的实际倾听部分)。如果您不想这样做,请使用getDocument调用,而不是侦听器

这是基于以下几点:

  • 当您查看snapshot.metadata.isFromCache(iOS SDK)进行查询时,调用将出现两次。首先从缓存,然后从服务器。但是,如果打印snapshot.documentChanges下的语句,则仅打印缓存的调用
  • 我做了一个实验,在iOS中重新加载了一个视图约20次。我还对我的数据做了一些小改动。然后,我等待了5-10分钟,查看了上的用法:。我的总阅读量增加了3,这意味着我只需要为更新付费。多次重新加载视图是不收费的