Si debe usar (y retener) una gran cantidad de memoria, entonces sí, puede y debe usar android:largeHeap="true"
. Pero si lo usa, debe estar preparado para que su aplicación se vacíe de la memoria siempre que otras aplicaciones estén en primer plano.
Por "estar preparado", me refiero a que debe diseñar para esa probabilidad, de modo que sus métodos onStop()
y onResume()
se escriban de la manera más eficiente posible, al tiempo que se asegura de que todo el estado pertinente se guarde y restaure de una manera que presente una apariencia perfecta para el usuario.
Hay tres métodos que se relacionan con este parámetro: maxMemory()
, getMemoryClass()
, y getLargeMemoryClass()
.
Para la mayoría de los dispositivos, maxMemory()
representará un valor similar al getMemoryClass()
predeterminado, aunque este último se expresa en megabytes, mientras que el primero se expresa en bytes.
Cuando use el largeHeap
parámetro, maxMemory()
se incrementará a un nivel superior específico del dispositivo, mientras getMemoryClass()
que permanecerá igual.
getMemoryClass()
no limita el tamaño de su pila, pero le indica la cantidad de pila que debe usar si desea que su aplicación funcione de manera cómoda y compatible dentro de los límites del dispositivo particular en el que se está ejecutando.
maxMemory()
Por el contrario, no limitar el tamaño de la pila, y así lo hace a obtener acceso a montón adicional a través de aumentar su valor, y largeHeap
hace que el valor de incremento. Sin embargo, la cantidad aumentada de montón sigue siendo limitada y ese límite será específico del dispositivo, lo que significa que la cantidad de montón disponible para su aplicación variará, dependiendo de los recursos del dispositivo en el que se ejecuta su aplicación. Por lo tanto, usar largeHeap
no es una invitación para que su aplicación abandone toda precaución y se abra camino a través del buffet de todo lo que pueda comer.
Su aplicación puede descubrir exactamente cuánta memoria estaría disponible en un dispositivo en particular mediante el uso del largeHeap
parámetro invocando el método getLargeMemoryClass()
. El valor devuelto está en megabytes.
Esta publicación anterior incluye una discusión del largeHeap
parámetro, así como una serie de ejemplos de qué cantidades de montón están disponibles con y sin su uso, en varios dispositivos Android específicos:
Detectar el tamaño del montón de aplicaciones en Android
No he implementado ninguna de mis propias aplicaciones con este parámetro establecido en verdadero. Sin embargo, tengo un código de memoria intensiva en una de mis aplicaciones para compilar un conjunto de parámetros relacionados con la optimización, que se ejecuta solo durante el desarrollo. Agrego el largeHeap
parámetro solo durante el desarrollo, para evitar errores de falta de memoria al ejecutar este código. Pero elimino el parámetro (y el código) antes de implementar la aplicación.