Chcę używać WeakReference
s jako część (android) bitmapy-cache, aby móc sprawdzić, kiedy bitmapa nie jest już używana.Kiedy WeakReference # get() zaczyna zwracać wartość null?
Moja pamięć podręczna ma maksymalny rozmiar, który jest mniejszy niż przestrzeń sterty Java. Kiedy nowa bitmapa przepełni pamięć podręczną, powinna puścić mapy bitowe, które nie są już potrzebne.
Moje pytanie: Kiedy metoda get() z WeakReference
zwraca wartość null?
- Jak tylko nie ma już silnych odniesień do obiektu? (i GC jeszcze się nie wydarzyło)
- Lub kiedy GC już działa i stwierdza, że ich nie ma więcej silnych odniesień do obiektu?
Jeśli 2. jest prawdą, mógłbym natknąć się na sytuację, w której moja pamięć podręczna mogłaby się wypełnić, a GC nie działała ostatnio z jakiegoś powodu.
Następnie, nawet jeśli już zwolniłem referencje PO ostatnim biegu GC, WeakReference#get()
nadal zwróci obiekt, a moja pamięć podręczna go nie wyczyści.
Miękkie odniesienia są przeznaczone do buforowania. Jakie są ich zachowania w systemie Android? –
To samo - są one uwalniane, gdy tylko nie ma silnych odniesień. Który podąża za listem standardu Java, jeśli nie duchem. –
Zmiana dotyczyła poziomu interfejsu API 9. Odpowiednia dokumentacja: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache – Delyan