2017-09-19 9 views
2

私のアプリは、しばらくの間、バックグラウンドに置かれた後にFirebase Realtime Databaseへの接続を失います...つまり、バックグラウンドで、Realtime Databaseサービスが機能しなくなり、電話機の設定でアプリデータをクリアしてすべて正常に戻すまで...私は同様のケースについて読んで、AndroidがFirebaseとリソース(ソケット接続)を破壊したことを知った特定の期間、バックグラウンドに置く。しかし、アプリケーションに戻った後に接続を復元するための簡単な解決策はありませんでした。しばらくの間、アプリケーションをバックグラウンドで終了した後、Firebaseリアルタイムデータベースへの接続が切断されます

+0

テスト対象のデバイスまたはエミュレータのAPIレベルは? –

+0

APIレベルは24です。 –

+0

Firebaseバージョン11.2.2を使用して構築されたテストアプリケーションを使用して、API 24エミュレータを使用して問題を再現しようとしました。アイドル状態([Doze Mode](https://developer.android.com/training/monitoring-device-state/dozestandstand.html))で強制的に変更するために 'adb'コマンドを使用しました。私がしたいくつかのテストでは、Dozeモードを終了するとwebsocket接続が常に再確立されました。アプリがバックグラウンドで接続されている必要がない場合は、 'onStop()'メソッドですべてのリスナーを削除し、 'onStart()'でそれらを再接続することを検討してください。これで、Firebaseはバックグラウンドで1分後に正常に切断されます。 –

答えて

0

表示されているアクティビティがない場合、アプリケーションはソケット接続を失うことが予想されます。それがFirebase SDKの仕組みです。また、Androidは積極的にバックグラウンドアプリケーションを一時停止し、ユーザーが積極的に使用していないときにデータやバッテリーを消費しません。

アクティビティが再び開始されると、Firebase SDKはサーバーとの通信に使用するWebSocketを復元しようとします。このWebSocketは、SDKによって完全に管理されています。再接続するために何かをする必要はありません。

+0

まあまあそれは再接続しません...すべてのデータリスナーと書き込みの試みは機能していません。 –

+0

それ以外の場合は、多くのアプリがそこに分割されます。デバッグログをオンにして、何が起きているかの詳細情報を取得します。 'FirebaseDatabase.getInstance()。setLogLevel(Logger.Level.DEBU G)' –

関連する問題