2017-09-27 2 views
0

Chaque fragment de mon application possède son propre ensemble d'écouteurs Firebase continus. Ceux-ci deviennent inutiles une fois le fragment actif a changé, cependant, les auditeurs continuent en arrière-plan. En outre, ces anciens écouteurs peuvent déclencher des mises à jour de vue pour le fragment précédent, ce qui peut provoquer le blocage de l'application. Donc, je voudrais être bien rangé et nettoyer les auditeurs une fois que le fragment change. Je ne sais pas comment, mais j'ai une solution alternative et j'étais curieux de vos pensées et suggestions.Suppression d'écouteurs Firebase continus sur le changement de fragment

Les fonctions d'écoute sont appelés dans les fragments onCreate, par exemple:

fuSetListener(); 

Ces fonctions extraient et enregistrer les données dans des variables globales.

Dans le onDataChange de l'auditeur Firebase J'exécute cette instruction if pour vérifier si l'auditeur doit être retiré:

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

La question se pose, ne getActivity() que revenir null dans le cas où le fragment a changé? Ou peut getActivity() retourner null sans changer le fragment et gâcher mon but Fragments?

J'ai appliqué cette méthode plusieurs fois et je n'ai pas encore eu de problème, mais je voulais vérifier avec vous avant de continuer.

Répondre

0

Vous devez supprimer l'écouteur en conséquence au life-cycle de votre fragment.

Si vous avez ajouté l'écouteur dans onStart, vous devez l'enlever dans onStop. Si vous avez ajouté l'écouteur dans onResume, vous devez l'enlever dans . Si vous avez ajouté l'écouteur dans onCreate, vous devez l'enlever dans onDestroy. Mais rappelez-vous que onDestroy n'est pas toujours appelé.

Espérons que ça aide.