是" removeEventListener" (android)关闭Firebase实时数据库连接?

时间:2017-09-01 14:21:44

标签: android firebase firebase-realtime-database

我浏览了所有文档和许多博客,但没有得到答案。

事情是我有一个100个同时连接到firebase实时数据库的初始免费配额。这意味着我的用户可以使用我的应用程序。使用该应用程序之后,除非用户没有{{1 destroy应用程序仍然对该用户保持打开状态,因此在此期间没有其他用户可以访问。

所以我的问题是,如果我从数据库参考中删除监听器,那么这也会关闭connection吗?

connection

有了这个,我想要实现的是,当User1获得他的搜索结果时,他/她将不再持有 ValueEventListener listener = null; DatabaseRefference ref =FirebaseDatabase.getInstance().getRefference("user"); listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { ref.removeEventListener(listener); //----Doing Stuffs } } ref.addListenerForSingleValueEvent(listener); ,这样另一个用户就可以进入数据库。

1 个答案:

答案 0 :(得分:3)

Firebase会自动管理连接。这在Realtime Database Guide

中有解释
  

在Android上,Firebase会自动管理连接状态以减少   带宽和电池使用量。当客户端没有活动的侦听器时,没有   挂起的写入或onDisconnect操作,并不是显式的   通过goOffline方法断开连接,Firebase会关闭连接   60秒后不活动。

另请注意,当监听器添加addListenerForSingleValueEvent()时,会在onDataChange()运行后自动删除。您不需要像发布的代码那样调用removeEventListenter()。这在documentation

中有所描述
  

一次读取数据

     

在某些情况下,您可能希望一次调用回调   立即删除,例如初始化你的UI元素时   不要指望改变。你可以使用   addListenerForSingleValueEvent()方法简化了这种情况:它   触发一次然后不再触发。

您可以使用伪位置/.info/connected的侦听器进行detect connection state更改。请注意,这确实算作普通的“活动”侦听器,并且不会禁止自动断开连接处理。

在连接状态管理上获得可见性的另一种方法是使用FirebaseDatabase.getInstance().setLogLevel(Logger.Level.DEBUG)启用调试日志记录。