2017-03-07 65 views
0

我構建了一個適用於Android操作系統的聊天工具,並且我希望始終能夠連接到Firebase。我的建議是實施後臺服務,檢測從Firebase斷開連接並斷開連接後重新連接。 我的服務的代碼:保持Firebase連接

public class FirebaseConnection extends Service { 

DatabaseReference connectedRef; 

    @Override 
    public void onCreate() { 

    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

    connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
    connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
    System.out.println("connected"); 
    } else { 
    connectedRef.goOnline(); 
    System.out.println("not connected"); 
    } 
    } 

@Override 
public void onCancelled(DatabaseError error) { 
System.err.println("Listener was cancelled"); 
} 
}); 

    return START_STICKY; 
} 
@Override 
    public IBinder onBind(Intent intent) { 
    return mBinder; 
    } 
    } 

該解決方案還不夠,我看到,短期內它斷開後重新連接,但幾個小時後,無法重新連接和連接結束。

請幫我找到解決方案

+1

當應用程序未處於活動狀態時,不要嘗試保持數據庫連接處於活動狀態。雖然它在構建時可能會起作用,但它可能會在其他設備上失敗(如果不是現在,那麼在未來的Android版本中)。當一個應用程序不活動時,它不應該保持網絡連接打開。要在應用程序處於非活動狀態時與其通信,請使用Firebase Cloud Messaging。 –

+0

我可以實現定期goOnline保持連接? –

回答

1

的火力地堡的SDK將始終盡力保持一個開放連接到你的火力地堡實時數據庫實例。如果連接中斷,它會自動嘗試重新連接。

沒有必要對該連接進行任何維護。它是爲你處理的。

+0

但是,如果我使用後臺服務,Firebase不會重新連接 –

+0

只有當Firebase偵聽器位於前臺時,Firebase纔會嘗試重新連接 –

+0

如果用戶未使用網絡資源,Android有權停止使用網絡資源。這有助於用戶保存數據。如果您想要通知您的應用程序是否有新數據,請使用FCM,然後使用它來加載新數據以響應消息。 –