2017-09-27 5 views
0

Jedes Fragment in meiner Anwendung hat seine eigenen kontinuierlichen Firebase-Listener. Diese werden unnötig, sobald sich das aktive Fragment geändert hat, die Zuhörer jedoch im Hintergrund weitermachen. Außerdem können diese alten Listener die Aktualisierung von "Views" für das vorherige Fragment auslösen, was die Anwendung zum Absturz bringen kann. Also, ich möchte sauber sein und die Zuhörer aufräumen, sobald sich das Fragment ändert. Ich weiß nicht wie, aber ich habe eine alternative Lösung und ich war neugierig auf deine Gedanken und Vorschläge.Entfernen von kontinuierlichen Firebase-Listenern bei Fragmentwechsel

Die Listener-Funktionen sind in den Fragmenten genannt onCreate, zum Beispiel:

fuSetListener(); 

Diese Funktionen abrufen und die Daten in globalen Variablen speichern.

Im onDataChange des Firebase Zuhörer führe ich diese if-Anweisung zu überprüfen, ob der Hörer entfernt werden sollte:

if(getActivity()==null){ 
    reference.removeEventListener(this); 
} else { 
    // Perform necessary onDataChange actions 
} 

So stellt sich die Frage, ist getActivity() nur zurückkehren null falls das Fragment hat sich geändert? Oder kann getActivity()null zurückgeben, ohne das Fragment zu ändern und meinen Fragments Zweck durcheinanderzubringen?

Ich habe diese Methode ein paar Mal angewendet und laufe noch nicht in Schwierigkeiten, aber ich wollte mit Ihnen vor dem Fortfahren überprüfen.

Antwort

0

Sie müssen den Listener entsprechend der life-cycle Ihres Fragments entfernen. Wenn Sie den Listener in onStart hinzugefügt haben, müssen Sie ihn in onStop entfernen. Wenn Sie den Listener in onResume hinzugefügt haben, müssen Sie ihn in entfernen. Wenn Sie den Listener in onCreate hinzugefügt haben, müssen Sie ihn in onDestroy entfernen. Aber denken Sie daran, onDestroy wird nicht immer aufgerufen.

Ich hoffe, es hilft.

Verwandte Themen