Jeśli musisz używać (i zachować) dużą ilość pamięci, to tak, możesz i powinieneś używać android:largeHeap="true". Ale jeśli go używasz, powinieneś być przygotowany na opróżnienie aplikacji z pamięci, gdy inne aplikacje są na pierwszym planie.
Przez „bądź przygotowany” rozumiem, że powinieneś projektować pod kątem takiego prawdopodobieństwa, aby twoje metody onStop()i onResume()metody były napisane tak wydajnie, jak to tylko możliwe, przy jednoczesnym zapewnieniu, że wszystkie stosowne stany są zapisywane i przywracane w sposób, który przedstawia bezproblemowy wygląd użytkownikowi.
Istnieją trzy metody, które odnoszą się do tego parametru: maxMemory(), getMemoryClass(), i getLargeMemoryClass().
W przypadku większości urządzeń domyślnie maxMemory()będzie reprezentować podobną wartość getMemoryClass(), chociaż ta ostatnia jest wyrażona w megabajtach, podczas gdy ta pierwsza jest wyrażona w bajtach.
Gdy użyjesz tego largeHeapparametru, maxMemory()zostanie zwiększony do wyższego poziomu specyficznego dla urządzenia, podczas gdy getMemoryClass()pozostanie taki sam.
getMemoryClass()nie ogranicza rozmiaru sterty, ale informuje o ilości sterty, której należy użyć, jeśli chcesz, aby aplikacja działała wygodnie i kompatybilnie w granicach określonego urządzenia, na którym używasz.
maxMemory(), Przeciwnie, ma ograniczyć rozmiar sterty, a więc zrobić uzyskać dostęp do dodatkowych sterty poprzez zwiększenie jej wartości, a largeHeapnie wzrost tej wartości. Jednak zwiększona ilość sterty jest nadal ograniczona, a ten limit będzie zależny od urządzenia, co oznacza, że ilość sterty dostępnej dla Twojej aplikacji będzie się różnić w zależności od zasobów urządzenia, na którym działa aplikacja. Dlatego używanie largeHeapnie jest zaproszeniem dla aplikacji do porzucenia wszelkiej ostrożności i przejścia przez bufet typu „wszystko, co możesz”.
Twoja aplikacja może dokładnie określić, ile pamięci byłoby dostępne na określonym urządzeniu za pomocą largeHeapparametru, wywołując metodę getLargeMemoryClass(). Zwracana wartość jest w megabajtach.
Ten wcześniejszy post zawiera omówienie largeHeapparametru, a także szereg przykładów tego, jakie ilości sterty są udostępniane z użyciem i bez jego użycia na kilku konkretnych urządzeniach z Androidem:
Wykryj rozmiar sterty aplikacji w systemie Android
Nie wdrożyłem żadnych własnych aplikacji z tym parametrem ustawionym na true. Jednak w jednej z moich aplikacji mam kod wymagający dużej ilości pamięci do kompilowania zestawu parametrów związanych z optymalizacją, który działa tylko podczas programowania. largeHeapParametr dodaję tylko podczas programowania, aby uniknąć błędów braku pamięci podczas uruchamiania tego kodu. Ale usuwam parametr (i kod) przed wdrożeniem aplikacji.