Wyciek pamięci w słuchaczu zdarzeń

Przejrzałem Artykuł http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html . w tym artykule sugeruje się użycie statycznej klasy wewnętrznej ze słabą referencją . Wiele klas wewnętrznych jest używanych dla słuchaczy wydarzeń. Czy te wewnętrzne klasy mogą również powodować wycieki pamięci? Czy te wewnętrzne klasy powinny być statyczne?

Author: Darshan Rivka Whittle, 2011-02-15

1 answers

Czy te wewnętrzne klasy mogą również powodować wyciek pamięci?

Możliwe. To zależy od tego, na czym Ci słuchacze są zarejestrowani.

Na przykład dobrze napisany OnClickListener dla Button nie powinien powodować wycieku pamięci, ponieważ nawet jeśli OnClickListener może być klasą wewnętrzną i mieć ukryte odniesienie do Activity, cały zestaw obiektów jest po prostu związany z działaniem. Dlatego, gdy aktywność zostanie zniszczona, aktywność, Button i OnClickListener mogą być zbierane śmieci jako całość.

Jednak LocationListener, zarejestrowany w usłudze systemowej LocationManager, jest przechowywany przez proces. Stąd nawet jeśli aktywność zostanie zniszczona, słuchacz pozostanie zarejestrowany. Jeśli ten słuchacz jest klasą wewnętrzną, będzie on nadal zawierał Ukryte odniesienie do aktywności, a Ty będziesz miał wyciek pamięci.

Czy te wewnętrzne klasy powinny być Staic one?

Możliwe. W większości przypadków prawidłowa odpowiedź brzmi: "jeśli rejestrujesz słuchacza innego niż z UI, pamiętaj, aby wyrejestrować go w odpowiednim momencie". W takim razie nie będzie przecieku.

Czy ktos moze mi podac przykladowy Kod jak sluchacz zdarzen moze uzywac przeciekajacych

Nie w abstrakcji, nie.

 37
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-15 23:57:52