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 largeHeap
parametru, 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 largeHeap
nie 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 largeHeap
nie 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ą largeHeap
parametru, wywołując metodę getLargeMemoryClass()
. Zwracana wartość jest w megabajtach.
Ten wcześniejszy post zawiera omówienie largeHeap
parametru, 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. largeHeap
Parametr 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.