¿Cómo aumentar el tamaño de montón de una aplicación de Android?

Estoy escribiendo una aplicación de Android que utiliza varios modelos 3D. Tal modelo con texturas puede tomar hasta un montón de memoria. Descubrí que el fabricante establece un límite en el tamaño de montón que una aplicación puede usar. Por ejemplo, mi tablet Samsung Galaxy Tab 8.9 P7310 puede ocupar hasta 64 MB de memoria.

¿Hay una manera de aumentar este tamaño de memoria que una aplicación puede usar?

Puedes usar android: largeHeap = "true" para solicitar un tamaño de montón más grande, pero esto no funcionará en ningún dispositivo pre Honeycomb. En los dispositivos pre 2.3, puede utilizar la clase VMRuntime, pero esto no funcionará en Gingerbread y superiores.

La única manera de tener un límite tan grande como sea posible es hacer tareas intensivas de memoria a través del NDK, ya que el NDK no impone límites de memoria como el SDK.

Alternativamente, sólo se puede cargar la parte del modelo que se está visualizando actualmente y cargar el resto según se necesite, mientras se eliminan las partes no utilizadas de la memoria. Sin embargo, esto puede no ser posible, dependiendo de la aplicación.

¿Hay una manera de aumentar este tamaño de memoria que una aplicación puede usar?

Las aplicaciones que se ejecutan en API Level 11+ pueden tener android:largeHeap="true" en el elemento <application> del manifiesto para solicitar un tamaño de montón mayor que lo normal y getLargeMemoryClass() en ActivityManager le dirá cuán grande es ese montón . Sin embargo:

  1. Esto sólo funciona en API Level 11 + (es decir, Honeycomb y más allá)

  2. No hay garantía de cuán grande será el montón grande

  3. El usuario percibirá su solicitud de gran montón, ya que va a obligar a sus otras aplicaciones de RAM de terminar los procesos de otras aplicaciones para liberar la RAM del sistema para su uso por su gran montón

  4. Debido a la # 3, y el hecho de que espero que android:largeHeap será abusado, el soporte para esto puede ser abandonado en el futuro, o el usuario puede ser advertido acerca de esto en el momento de la instalación (por ejemplo, usted tendrá que solicitar un especial Permiso para ello)

  5. Actualmente, esta característica está ligeramente documentada

No puede aumentar el tamaño de montón dinámicamente.

Puede solicitar utilizar más con android:largeHeap="true" en el manifiesto.

También, puede utilizar la native memory (NDK & JNI) , por lo que realmente eludir la limitación de tamaño de montón.

Aquí hay algunos mensajes que he hecho sobre él:

  • Cómo almacenar en caché los mapas de bits en la memoria nativa

  • Operaciones de mapa de bits JNI, para ayudar a evitar MOO cuando se utilizan imágenes grandes

Y aquí hay una biblioteca que he hecho para ella:

Utilice el segundo proceso. Declare en AndroidManifest nuevo Service con

 android:process=":second" 

Intercambio entre el primer y segundo proceso a través de BroadcastReceiver

Por lo que recuerdo, podrías usar la clase VMRuntime en las primeras versiones de Android, pero ahora ya no puedes.

No creo que dejar que el desarrollador elija el tamaño de montón en un entorno móvil se puede considerar tan seguro sin embargo. Creo que es más fácil encontrar una manera de modificar el tamaño de montón en un dispositivo específico (no en el lado de programación) que al tratar de modificarlo desde la aplicación en sí.

Esto se puede hacer de dos maneras según su sistema operativo Android.

  1. Puedes usar android:largeHeap="true" en la etiqueta de aplicación de Android manifiesto para solicitar un tamaño de montón más grande, pero esto no funcionará en cualquier dispositivo pre Honeycomb.
  2. En dispositivos pre 2.3, puede utilizar la clase VMRuntime , pero esto no funcionará en Gingerbread y más arriba. Vea a continuación cómo hacerlo.
 VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE); 

Antes de configurar HeapSize asegúrese de que ha introducido el tamaño adecuado que no afectará a otra aplicación o la funcionalidad del sistema operativo. Antes de la configuración, solo comprueba el tamaño de la aplicación y, a continuación, establece el tamaño sólo para cumplir tu trabajo. No utilice tanta memoria de lo contrario podrían afectar otras aplicaciones.

Referencia: http://dwij.co.in/increase-heap-size-of-android-application

El aumento de Java Heap se come injustamente déficit móvil resurces. A veces es suficiente con esperar a que el recolector de basura y luego reanudar sus operaciones después de que el espacio de la pila se reduce. Utilice este método estático entonces.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.