programistycznyDuet
Nieszablonowo o programowaniu
0 obserwujących
4 notki
717 odsłon
163 odsłony

Komu potrzebna jest słaba referencja w Javie?

Wykop Skomentuj1

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.

Wykop Skomentuj1
Ciekawi nas Twoje zdanie! Napisz notkę Zgłoś nadużycie

Więcej na ten temat

Salon24 news

Co o tym sądzisz?

Inne tematy w dziale Technologie