Fuite de mémoire dans l'écouteur d'événement
Je suis passé par l'article http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html. Dans cet article, il est suggéré d'utiliser une statique à l'intérieur de la classe avec une WeakReference . De nombreux centres de classes sont utilisées pour des écouteurs d'événement. Est-ce que ceux intérieure également provoquer des fuites de mémoire? Celles intérieur de cette classe statique?
Vous devez vous connecter pour publier un commentaire.
Peut-être. Cela dépend de ce que ces auditeurs sont inscrits sur.
Par exemple, un bien écrit
OnClickListener
pour unButton
ne devrait pas entraîner une fuite de mémoire, parce que même si leOnClickListener
peut-être un intérieur classe et ont une référence implicite à l'Activity
, l'ensemble des objets sont tous tout simplement lié à l'activité. Par conséquent, lorsque l'activité est détruite, l'activité,Button
, etOnClickListener
peuvent tous être garbage collector dans son ensemble.Cependant, un
LocationListener
, enregistré avec leLocationManager
système de service, est tenu par le processus. Par conséquent, même si l'activité est détruite, l'auditeur restera enregistré. Si l'écouteur est à l'intérieur de la classe, il continuera à tenir une référence implicite à l'activité, et vous aurez une fuite de mémoire.Peut-être. Dans la plupart des cas, la bonne réponse est "si vous vous inscrivez à un auditeur qu'avec l'INTERFACE utilisateur, assurez-vous d'annuler son inscription à un moment approprié". Dans ce cas, il n'y aura pas de fuite.
Non pas dans l'abstrait, no.