programistycznyDuet programistycznyDuet
415
BLOG

Komu potrzebna jest słaba referencja w Javie?

programistycznyDuet programistycznyDuet Komputery Obserwuj temat Obserwuj notkę 1

Ostatnio zajmowałem się dodaniem nowej funkcjonalności w jednej z aplikacji androidowych dla naszego klienta. W tym celu skorzystałem z gotowej biblioteki, która implementowała listenery na content provider – potrzebowałem dowiedzieć się kiedy jeden z kluczy w content providerze zostanie zmieniony i jaka będzie jego nowa wartość.


Biblioteka, która zajmuje się obsługą content providera pozwala na zarejestrowania listenera na wszelkie zmiany wartości kluczy w tym content providerze.


To co zrobiłem, to zarejestrowałem listenera za pomocą wywołania API tej biblioteki. Niestety, nie sprawdziłem że listener jest przechowany w HashMapie, która przechowuje zarejestrowany listenery jako słabe referencje. Efekt był taki, że mój obiekt, który zarejestrowałem jako listener był sprzątany przez garbage collector zaraz po wyjściu z metody w której go utworzyłem i zarejestrowałem jako listener.


Doceniłem WeakReference dopiero kiedy zrozumiałem jej działanie w tym konkretnym przykładzie. Słaba referencja chroni przed wyciekiem pamięci.

W momencie utworzenia obiektu i następnie zarejestrowania go jako listenera lista listenerów będzie przechowywała referencje do obiektu listenera. Dlatego obiekt nie będzie mógł być posprzątany przez garbage collector.

Programistyczny Duet

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie