2017-09-01 25 views
0

我瀏覽了所有的文檔和很多博客,但沒有得到答案。「removeEventListener」(android)關閉Firebase實時數據庫連接嗎?

的是,我必須將火力實時在時刻database.That意味着,除非和直到一個用戶我的用戶可以使用的應用程序使用我application.After 100 100個同時連接的初始自由配額不destroy的應用程序connection仍然對該用戶保持開放,因此在此期間沒有其他用戶可以訪問。

所以我的問題是,如果我從數據庫引用中刪除監聽器,這也會關閉connection嗎?

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得到他,他的搜索結果/她將不再持有一個connection並以這種方式另一個用戶可以進入數據庫。

回答

1

Firebase自動管理連接。這在Realtime Database Guide解釋:

在Android,火力地堡自動管理的連接狀態,以減少帶寬 和電池使用。當客戶端沒有活動偵聽器時,沒有 掛起寫入或onDisconnect操作,並且未明確 被goOffline方法斷開連接,Firebase在60秒不活動後關閉連接 。

另請注意,當偵聽器添加了addListenerForSingleValueEvent()後,它會在onDataChange()運行後自動刪除。您不需要撥打removeEventListenter(),就像您在發佈的代碼中所做的那樣。這在documentation描述:一次

在某些情況下,你可能需要一個回調被調用一次,然後 立即刪除

讀取數據,例如初始化UI元素時爲您 不要指望改變。您可以使用 addListenerForSingleValueEvent()方法來簡化此方案:它會觸發一次,然後不再觸發。

您可以detect connection state在僞位置/.info/connected處與偵聽器發生更改。請注意,這不屬於正常的「活動」收聽者,並且不會禁止自動斷開連接處理。

另一種獲取連接狀態管理可見性的方法是使用FirebaseDatabase.getInstance().setLogLevel(Logger.Level.DEBUG)啓用調試日誌記錄。

+0

非常感謝您的回答 –