2017-09-29 3 views
-1

私はFirebase Realtime Databaseについてしばらく読んできましたが、データベースからイベントドリブンのデータを取得するという考え全体について考えているだけです。データが変更されたときにのみデータがデータベースからダウンロードされた場合、バッテリやインターネット接続などのデバイスリソースの要求はずっと少なくなければなりません。私は、データベースの構造を反映したModelオブジェクトでAndroidのアクティビティに必要なデータベース全体を再マップし、その値をChild/Valueリスナーで更新できると考えました。それから私はPOJOの柔軟な形式で必要なすべてのデータを取得し、データベースに変更があるたびに更新されます。したがって、実際にはリアルタイムの解決策です。しかし、そのような数のリスナーが、バッテリの寿命やデータ転送など、ユーザーのデバイスを減速させたり過負荷にするかどうかは疑問です。複数のFirebaseデータベースのチャイルド/バリューリスナーはモバイルアプリにとって効率的ですか?

Javaモデルオブジェクトにデータベースの状態を反映するのは良い解決策ですか、別の方法をとるべきですか?

誰でも私の疑問を解決できますか? ありがとう!

答えて

2

リスナは、データベース内で何かが変更された場合にのみトリガされます。したがって、必要なときにのみデータを取得できます。可視アクティビティがない場合、あなたのアプリはソケット接続を失うことが予想されます。それがFirebase SDKの仕組みです。また、Androidは積極的にバックグラウンドアプリケーションを一時停止し、ユーザーが積極的に使用していないときにデータやバッテリーを消費しません。

たとえば、アクティビティを再起動すると、Firebase SDKはサーバーとの通信に使用するWebSocketを復元しようとします。このwebsocketは、SDKによって完全に管理されています。

希望します。

+0

ありがとうございました!少し質問があります。対応するオブジェクトが不要になったとき、または削除されたときにすべてのリスナーを切り離すべきですか?もしそうなら、私はリスナーを参照する必要があります、そうではありませんか? – Mesayah

+0

はい、必須です!アクティビティのライフサイクルに従って、 'yourRef.removeEventListener(valueEventListener);'を使用する必要があります。 –

0

Firebase.addvalueeventlistener()は、要求しているデータベースに変更または更新がある場合にのみ機能します。また、JAVAオブジェクトを使用して移動する、またはHashMaps <>を使用することもできます。 デバイスのバッテリーと性能に懸念がある限り、データベース全体を要求する代わりに、変更イベントを追跡したい部分だけを取得しようとします。 また、Whatsappとしてバックグラウンドでデータを取得したい場合は、インターネット用のブロードキャストレシーバーとFirebase.addvalueeventListener()用のstartservice()を使用できます。

関連する問題