2012-12-19 14 views
5

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?"

Odpowiedz

-6

Spróbuj to w tagu AndroidManifest.xml w <Application>:

android:largeHeap="true" 

i podać swój kod, aby pomóc więcej.

+3

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. –

Powiązane problemy