2016-07-22 1 views
2

Ich verwende einen onChildEventListener, um 10'000 Kinder abzurufen.
Die Zeit bis zum Abschluss des Vorgangs beträgt ca. 5 Sekunden.
Während dieser Zeit friert die App ein.
Gibt es eine Möglichkeit, es schneller zu machen?
Ich habe auch versucht, einen ValueEventListener zu verwenden und festgestellt, dass das Durchfahren von Kindern viel schneller ist. Wie auch immer, das war keine zuverlässige Lösung, also wechselte ich wieder zu onChildEventListener.Firebase onChildEventListener langsam

Antwort

1

Der Datenabrufprozess ist genau derselbe, ob Sie eine ValueEventListener oder eine ChildEventListener verwenden. Der einzige Unterschied besteht darin, wie die Ereignisse ausgelöst werden/Rückrufe in Ihrer App ausgelöst werden. Außerdem: Alle Netzwerkaktivitäten für die Datenbank werden in einem separaten Thread ausgeführt.

Dies bedeutet, es ist nicht das Abrufen der Daten, die Ihre App einfriert, sondern eher die Art, wie Sie die Daten in Ihrem onDataChange() Rückruf behandeln. Wenn Sie dort substanziell arbeiten, sollten Sie dies über den Hauptthread hinaus tun.

+0

Vielen Dank für Ihre Antwort. Es gab tatsächlich zwei Dinge, die die Langsamkeit verursachten. Ich verwendete dataSnapshot.getValue() mehrmals innerhalb onChildAdded() und ich verwendete notifyDataSetChanged() für jedes Kind hinzugefügt. Das Problem, mit dem ich jetzt konfrontiert bin, ist, dass ich die Benutzeroberfläche aktualisieren muss, wenn alle Kinder abgerufen wurden. Jedenfalls scheint es in Firebase keine Methode zu geben, um zu wissen, wann das passiert ist. –