我浏览了所有文档和许多博客,但没有得到答案。
事情是我有一个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);
,这样另一个用户就可以进入数据库。
答案 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)启用调试日志记录。