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 nombreuses classes intérieures sont utilisées pour les auditeurs d'événements. Ces classes intérieures peuvent-elles aussi causer des fuites de mémoire? Ces classes intérieures devraient-elles être statiques?

25
demandé sur Darshan Rivka Whittle 2011-02-15 13:38:08
la source

1 ответов

ces classes intérieures peuvent-elles aussi causer des fuites de mémoire?

peut-être. Cela dépend sur quoi ces auditeurs sont enregistrés.

par exemple, unOnClickListenerButton ne devrait pas entraîner de fuite de mémoire, car même si le OnClickListener peut être une classe intérieure et avoir une référence implicite à la Activity, l'ensemble des objets sont tous tout simplement lié à l'activité. Par conséquent, lorsque l'activité est détruite, l'activité, Button, et OnClickListener peuvent toutes être ramassées dans leur ensemble.

cependant, un LocationListener, enregistré avec le LocationManager service système, est tenu par le processus. Par conséquent, même si l'activité est détruite, l'auditeur restera enregistré. Si cet auditeur est une classe intérieure, il continuera à contenir une référence implicite à l'activité, et vous aurez une fuite de mémoire.

ces classes intérieures devraient-elles être stables?

peut-être. Dans la plupart des cas, la la bonne réponse est "si vous enregistrez un auditeur autrement qu'avec L'UI, assurez-vous de le désinscrire à un moment approprié". Dans ce cas, il n'y aura pas de fuite.

est-ce que quelqu'un peut me donner n'importe quel exemple de code comment l'écouteur d'événement peut utiliser Étanche.

non Pas dans l'abstrait, non.

37
répondu CommonsWare 2011-02-16 02:57:52
la source