Estoy desarrollando una aplicación que contiene muchas imágenes. Me he dado cuenta de que el uso de la memoria de mi aplicación es bastante mayor en Android 2.3 que en Android 2.2, lo que finalmente da como resultado errores OutOfMemory mientras que carga mapas de bits. Al investigar esto, registré el resultado de Debug.getNativeHeapAllocatedSize() en el onResume de la primera actividad . En Android 2.2, esto produce 5MB. En Android 2.3, este emite 17MB.Uso de memoria entre Android 2.2 y 2.3
Creé una aplicación de muestra para tratar de reducir aún más esto. La aplicación de muestra tiene 2 actividades: la primera tiene una imagen pequeña y un botón para iniciar la segunda actividad; la segunda actividad tiene varias imágenes grandes en ScrollView. Puede descargar la muestra aquí: http://dl.dropbox.com/u/21709517/MemoryUsageExample.zip Al ejecutar este ejemplo, Debug.getNativeHeapAllocatedSize() informa 3MB asignados después de iniciar la primera actividad tanto en 2.2 como 2.3. Después de iniciar la segunda actividad, Android 2.2 todavía informa 3MB asignado, mientras que Android 2.3 reporta 17 MB asignados. La ejecución de "adb shell dumpsys meminfo test.example" muestra los mismos tipos de resultados.
¿Por qué hay una diferencia tan dramática entre Android 2.2 y 2.3? Y más importante aún, ¿qué debo hacer de forma diferente para evitar que use tanta memoria en Android 2.3?
----- ----- ACTUALIZACIÓN
Después de mirar la información publicada Romain individuo, me decidí a hacer un poco más jugando con las distintas opciones de carga. El resultado muestra que forzar que las imágenes se carguen como RGB_565 reduce la memoria en Android 2.3, sin embargo, todavía usa más de 2.2. En mi aplicación de ejemplo, Android 2.3 ahora usa 10MB vs Android 2.2 usando 3MB. Además, traté de forzar 32 bits usando ARGB_8888. En este caso, Android 2.3 usa 17 MB, pero Android 2.2 solo usa 3 MB. La muestra actualizada se puede encontrar aquí: http://dl.dropbox.com/u/21709517/MemoryUsageExample2.zip
¿Cuál es la causa de estas diferencias? ¿Hay algo más que se debe hacer para que el uso de la memoria se aproxime más a Android 2.2? Además, ¿hay alguna manera de forzar imágenes creadas mediante diseños xml en un formato particular? ¿Se puede establecer esto en toda la aplicación? Gracias.
ACTUALIZACIÓN ----- ----- 2
Según this thread, no es posible forzar imágenes cargadas a través de la inflación xml ser un formato particular.
Todavía estoy esperando una respuesta sobre por qué Android 2.2 y Android 2.3 usan diferentes cantidades de memoria después de forzar 16 o 32 bits.
Algo es dudoso aquí, estoy teniendo el mismo problema. 2.3 es un desastre para mi aplicación de manipulación de imágenes: http://stackoverflow.com/questions/5871143/android-2-3-has-lower-vm-budget-than-2-1-and-2-2 – Lumis