Mam działanie, w którym użytkownik może przechodzić od jednego fragmentu do drugiego. Fragment rozpoczyna się, pobiera niektóre dane i wyświetla je (wraz z rysowaniem niektórych ikon z zasobów itp.). Użytkownik może kontynuować przechodzenie do przodu przez fragmenty tak długo, jak im się podoba (aż się znudzą?).Problemy z pamięcią z dużą liczbą fragmentów w tylnym stosie
Problem polega na tym, że ostatecznie dojdzie do OutOfMemoryError (po około 90 fragmentach na sterty vm 32mb). 90 wydaje się dość dużo, ale widziałem takie raporty błędów pamięci w terenie, więc prawdopodobnie zdarza się to wcześniej na urządzeniach niższego rzędu. Upewniłem się, że wszelkie widoki, które utworzę w onCreateView, unieważniam w onDestroyView. Jedyne inne obiekty, które posiadają moje fragmenty (o ile wiem) to dane pobierane na początku, zwykle tylko 10-50kb.
Moje pierwsze pytanie brzmi: czy to normalne? Czy mogę oczekiwać, że "tylko" będzie w stanie mieć ~ 90 fragmentów w tylnym stosie? A może mam wyciek pamięci gdzieś, co mogę zrobić?
Jeśli użytkownik zniknie z mojej aplikacji, a Android zdecyduje się zabić cały proces w celu zwolnienia pamięci, kiedy użytkownik zwróci zużytą pamięć, jest znacznie mniej, ponieważ cały stan został przywrócony z pakietów. Jeśli użytkownik następnie wycofa się poprzez tylny stos, każdy fragment jest oczywiście tworzony/wznawiany z savedinstancestate.
Moje drugie pytanie brzmi: czy istnieje sposób, aby to zmusić? Tj. "Jeśli w tylnym stosie znajduje się> 50 fragmentów, zacznij zabijać te na dole do zapisanego stanuInstanceState?"
To straszne porady - i tylko sztucznie przedłuża ile jeszcze fragmenty można zapakować - ten problem nadal pozostaje. Firma Google wyraźnie oświadcza, że nie używa tego do rozwiązywania problemów z wyciekami pamięci. –