Asignación de memoria de Android
Estoy obteniendo un error de "tamaño de mapa de bits supera el presupuesto de VM". He leído que hay un límite de memoria de 16 MB. En este hilo Romain Guy dice que "solo puedes asignar 16 MB de memoria para toda tu aplicación".
Sin embargo, mi aplicación debe estar agotando la memoria mucho antes de que llegue a ese límite. Así que mi pregunta es: ¿cómo puedo asignar memoria a mi aplicación … ¿cómo puedo obtener la asignación a mi aplicación aumentó (dentro de los 16 MB máximo)?
- Convertir un entero en una cadena sin asignar memoria
- Aplicación para Android que toma mucha memoria
- Android: PSS (Proportional Set Size) Cálculo
- Truco de usar largeHeap en Androids más viejo <3?
- Java mmap falla en Android con "mmap failed: ENOMEM (Fuera de memoria)"
- Reciclaje de bitmaps
- Android no libera Bitmap de la memoria
- ¿Cómo puedo depurar el consumo de memoria RAM de mi aplicación Android en tiempo de ejecución?
- Android: obtener memoria asignada
- ¿Cuánta memoria debe usar una aplicación típica de Android?
- Foreground Service retiene objetos de memoria
- ¿Cómo Android OS calcula el uso de memoria de una aplicación?
- ¿Cómo puedo determinar si mi aplicación Android tiene pérdida de memoria?
Como con cualquier máquina virtual Java, la memoria heap crecerá automáticamente hasta el tamaño máximo. Pero, los mapas de bits se asignan fuera de la máquina virtual, por lo que no "ver" fácilmente en las estadísticas. Lo mejor que puede hacer es asegurarse de que no utilice mapas de bits grandes o que los reduzca usando
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
Desde Eclipse puedes generar un volcado de montón cuando estés en Android 1.6 o superior y puedes analizar el volcado con Eclipse MAT.
En general, no puede controlar el tamaño máximo del montón en un dispositivo real, a menos que esté trabajando con hardware o firmware personalizado.
Debería haber un artículo en developer.android.com sobre el dumping de la pila en 1.6, pero no puedo encontrarlo. 🙁
Editar
También, tengo que mencionar que usted puede pedir más memoria para aplicaciones usando
Android: largeHeap = "true"
En el manifiesto. Pero esto es muy mal-adviced como la mayoría de las aplicaciones no necesitan esto.
Tenga en cuenta que el límite de montón es dependiente del dispositivo. En un Droid o Nexus One, ese límite es de 24 MB (para acomodar los recursos gráficos más grandes).
Si utiliza subprocesos, el depurador podría ser el origen del problema. Si ejecuta la aplicación en el depurador, todos los subprocesos creados seguirán siendo conservados por el depurador, incluso cuando terminen de ejecutarse. Esto conduce a errores de memoria que no se producirán cuando la aplicación se ejecuta sin el depurador.
http://code.google.com/p/android/issues/detail?id=7979
https://android.googlesource.com/platform/dalvik/+/master/docs/debugger.html
He encontrado la respuesta a su pregunta recientemente.
Vaya al Directorio SDK de Android y
Ejecutar sdk manager (Herramientas-> android ejecutar este archivo)
En SDK manager vaya a Herramientas -> Administrar AVDs
Ahora, el cuadro de diálogo Administrador de dispositivos virtuales de Android está abierto.
En esa ventana seleccione su AVD y haga clic en Editar
Ahora en la sección de tarjeta SD, seleccione TAMAÑO y establezca 1024 MiB en la sección Hardware, haga clic en Nuevo y seleccione la propiedad "Máximo tamaño de montón de aplicación de VM" Ahora configure 100 (según el requisito de su aplicación) Finalmente haga clic en "Editar AVD"
Después de editar haga clic en el botón de actualización en sdk Manager
Ahora ejecute su aplicación en AVD su problema se resuelve.
- Gran cantidad de memoria no recogida de basura
- Cómo crear barra de progreso de estilo horizontal mediante programación en Android?