我看过有关Firebase儿童侦听器(How firebase listener actually work?)的早期文章。但是我仍然找不到我想要的东西。
我有一个带有前台服务的android应用程序,该服务可以全天候运行,并且其中包含一个子侦听器。基于任何childAdded / Updated / deleted操作,某些操作由服务执行。
我面临的问题是,有大量的电能消耗,这与发送/接收的互联网数据有关(基于电池读数)。我很确定儿童监听器已经过优化,可以减少功耗和网络消耗。
在以下情况下,我想知道子侦听器的工作原理(即指数补偿等):
1)超过20分钟,该子侦听器参考节点上未添加任何子项
在这种情况下,Android设备多久连接一次子监听器?并维持与服务器的开放套接字连接会不会有任何功耗?
2)在Firebase节点上60分钟没有任何更改之后,突然有一个添加/更新/删除子操作,并且监听器被触发。
在这种情况下功耗是多少?设备是否再次触发3.5kB的开销以重新连接到服务器?
3)如果我使用goOffline方法(或等同于firestore的方法)关闭了数据库(用于firestore或realtimeDB),则断开连接之前需要花费多少时间?根据我所做的一些android分析,我发现在连接终止前有将近五分钟的间隔!
答案 0 :(得分:1)
只要有一个活动的侦听器,您的Android设备和与其连接的Firebase数据库服务器之间便存在一个打开的套接字。在这种情况下,没有“指数退避”,监听器保持连接状态。
如果您不想保持这样的开放连接,则可以定期从代码中调用addListenerForSingleValueEvent
或显式调用goOffline()
/ goOnline()
。第三种选择是通过其REST API访问Firebase。
每次客户端重新连接到服务器时,都必须进行SSL握手。在Android上无法阻止这种情况。
5分钟的延迟可能只是设备上的套接字超时。 Firebase客户端对此无能为力,因为它是套接字操作的正常部分。