Java : Pourquoi ne faut-il pas déclarer cet attribut `static` ?

a marqué ce sujet comme résolu.

Salut à tous !

Je développe une appli Android qui communique avec une base de donnée Firebase Cloud Firestore. Pour ce faire j’ai donc recours à la classe FirebaseFirestore. Celle-ci, implémentant le schéma singleton, propose une méthode getInstance() qui fournit l’instance avec laquelle travailler.

Chaque fois que je veux exécuter une requête, il faut que je fasse un FirebaseFirestore::getInstance()->maRequete(), c’est comme ça que ça marche.

Toutefois, je voulais appeler une seule fois le getInstance() (bien que ça n’ait aucun intérêt en fait) et ainsi ranger ça dans une classe, en tant qu’attribut de classe static.

Sauf qu’un gars qui s’y connaît a dit à un mec qui voulait faire la même chose que moi, qu’il ne faut surtout pas faire ça. Voici ses explications :

Do not place Android context classes in static fields. Static reference to FirebaseFirestore which has field context pointing to Context will lead to a memory leak.

A static field will leak contexts. Non-static inner classes have an implicit reference to their outer class. If that outer class is for example a Fragment or Activity, then this reference means that the long-running handler/loader/task will hold a reference to the activity which prevents it from getting garbage collected.

So instead of storing it as a static variable call getInstance() whenever is needed.

Sauf que je ne comprends pas ce qu’il dit (pas un problème de traduction, c’est juste que techniquement je suis perdu). Quelqu’un pourrait-il reformuler svp ?

Ce que je comprends en gros c’est que si l’objet qui possède ton attribut static n’est plus nécessaire il ne sera quand même pas détruit et la mémoire ne sera pas récupérée par le GC.
Pourquoi ? Parce que ça impliquerait de devoir aussi libérer l’instance de ton singleton.

Des gens plus compétents me corrigeront si je dis des bêtises.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte