Mam Fragment
, który ma RecyclerView
.Pamięć nie zwalniająca po usunięciu fragmentu
W tym RecyclerView
, może od czasu do czasu pobierania i wyświetlania obrazów (ładowany z Glide do ImageView
.
Więc kiedy otworzyć Fragment
stosowane pamięci może czasami skoczyć z około 30MB do około 100 MB lub nawet więcej.
Po Activity
która trzyma Fragment
zakończeniu pamięć nie zwolnić. To pozostaje taka sama jak poprzednio.
Glide sprawdziłem dokumentację i widocznie nie musimy się martwić o uwolnienie Bitmaps
w RecyclerView
. Jest to poważny problem, ponieważ aplikacja często zawiesza się z powodu OOM z tego powodu.
Jak poprawnie obsługiwać zwalnianie pamięci po usunięciu Fragment
?
Edit: Kolejna obserwacja
Inną rzeczą, jaką zauważyłem jest to, że jeśli skończę Activity
a następnie ponownie uruchomić tę samą Activity
. Pamięć zeskoczy z powrotem na chwilę, a następnie z powrotem do 100 MB, co prowadzi mnie do przekonania, że pamięć została wyczyszczona przed ponownym uruchomieniem Fragment
.
Dzięki, to zdecydowanie pomaga. Dam to jutro spróbować (chociaż może to potrwać jakiś czas, zanim zrobię to w całej aplikacji), a dam ci znać, jak poszło. – Guy
Kiedy powiedziałeś, że chcesz wyczyścić wszystkie zmienne, oznacza to zmienne instancji, prawda? Jeśli utworzę zmienną w metodzie onCreate, czy powinienem wyczyścić tę zmienną po jej zaprzestaniu? – Guy
Tak. Wszystko, co przyznajesz, musi/powinno być załatwiane, gdy tylko wiesz, że nie będziesz już tego potrzebować. Jako metafora: 1) Kupujesz kawałek jednorazowego papieru. Na tej kartce piszesz kilka faktów o swoim dniu 2) Użyjesz tego kawałka papieru przez cały dzień, ale wiesz, że nie będziesz potrzebował papieru na zawsze 3) Pod koniec dnia zdajesz sobie sprawę, że papier teraz spełnił swój cel. 4) Papier należy wyrzucić, rozrywając go i wyrzucając do kosza na śmieci. Rozumiem teraz "kartkę papieru" jako dowolną zmienną, której używasz, i swój "dzień" jako cykl życia aktywności. –