我正在将firebase用于学校仪表板应用程序。该应用程序是使用android构建的。它通过谷歌凭据登录到firebase。在firebase上启用了磁盘持久性。应用程序没有其他服务或连接。构建中的Firebase版本是' com.firebase:firebase-client-android:2.4.0 +'
我打开了应用程序 - 它登录并获取数据 - 然后将其放入后台。数据用法如下所示 -
前景数据使用率保持稳定在 - 38.87kb
背景数据使用量每隔几分钟就会增加--2.53kb,2.94kb,11.49kb,11.9kb,12.18kb,12.59kb,13.90kb,67kb,92kb。它每分钟消耗大约1.5kb的数据。
我确保所有firebase侦听器在暂停时断开连接。为什么应用程序后台数据的使用会不断增加?
答案 0 :(得分:3)
Firebase客户端保持对其服务器的网络连接。作为保持此连接的一部分,客户端和服务器偶尔会交换保持活动消息。这些可能会使用一些内存,这些内存应该(大部分)在垃圾收集时回收。
您可能希望升级到最新版本的Firebase SDK for Android btw。它现在是2.5.2版本。
答案 1 :(得分:1)
我刚刚在Firebase类上找到了2个方法 - goOffline()和goOnline()可以帮助我减少后台数据的使用。我将在onPause中尝试它们,并在应用程序中的所有活动中使用onResume。
答案 2 :(得分:0)
我为减少数据使用所做的工作是创建一个服务,该服务保留了firebase需要联机时的引用计数状态,并根据该状态使用goOnline()/ goOffline():
class OnlineTracker {
void onlineNeeded(); //Increase reference count
void releaseOnlineNeeded(); //Decrease reference count
}
当您需要执行要求Firebase在线的操作时,您可以:
try {
OnlineTracker.onlineNeeded();
...
Firebase operations that need online status
...
} finally {
OnlineTracker.releaseOnline()
}
这样当OnlineTracker的引用计数> 0时,它调用goOnline(),当它返回0时,它调用goOffline();
为了防止过多的切换,你也可以在goOffline时延迟并等待一段时间,看看是否需要在很短的时间内获得在线状态。