Android deallocate Bitmaps en la memoria "desconocida"

Estoy haciendo una aplicación de dibujo, sobre todo por diversión. Pero he tenido un problema.

Dentro de mi aplicación, el usuario puede "voltear" a través de bocetos que ya han dibujado. Estos bocetos son sólo 400×800 Bitmaps. Pero estoy corriendo constantemente en fuera de los errores de memoria.

Los bocetos se guardan en SD tan pronto como el usuario se aleja de ellos, y luego se desasignan con …

if(bitmap != null) { bitmap.recycle(); bitmap = null; } 

Por lo tanto, sólo uno o dos mapas de bits se deben cargar en la memoria en un momento dado, antes de que se guarden y se desasignen. Y con algunas impresiones de depuración, he determinado que esto es cierto (máximo dos mapas de bits en la memoria al mismo tiempo). Mi problema es que después de 14 cargas / desasignaciones, el programa se bloquea con un OutOfMemoryError. Siempre 14, no importa cuánto tiempo espero entre "voltea".

He intentado abrir DDMS para ver cómo es la asignación de memoria del dispositivo. Curiosamente, cada vez que una imagen se desasigna, la memoria va a la sección "desconocido", en lugar de la sección "libre". Esto continúa hasta que sólo queda una pequeña cantidad de memoria "libre", momento en el que se produce el fallo (y la memoria "desconocida" pasa a "libre").

Después de un montón de google, he encontrado algunos recursos que dicen que los mapas de bits deben ser desasignados como se espera , y que las colecciones de basura Dalvik siempre se producen antes de un error de memoria . Y algunas páginas misceláneas que sugieren que TODA la memoria utilizada por un mapa de bits se desasigna en GC (nativo y JVM montón por igual)

Debo señalar, en este punto, que estoy probando en dos teléfonos diferentes. Motorola Droid X (imagen de stock, Android 2.3.3) y Samsung Galaxy S3 (Cyanogenmod 9, Android 4.0.4). Ambos exhiben el mismo comportamiento. Mis herramientas de Android están al día con todas las versiones de SDK, y he comprobado un millón de veces para asegurarme de que nada más en mi código está haciendo asignaciones extrañas (prácticamente nada se asigna después del inicio del programa).

Así que , ¿cómo debería desasignar correctamente un mapa de bits para que se libere (no sólo "desconocido"), y puedo usar la memoria en otro lugar? Como una especie de pregunta complementaria, ¿cuál es esta piscina de memoria "desconocida", y para qué sirve?

EDIT: Gramática y ortografía, agregó algunas notas en la plataforma.

One Solution collect form web for “Android deallocate Bitmaps en la memoria "desconocida"”

Utilice la imagen grande (también 1mb cerca). Puedes usar androidmanifest en el conjunto de etiquetas de aplicación montón grande true.and que el uso personalizado Ver no utilizar imageview (porque demasiado complejo y necesita más que otras vistas)

  • Cuando Android ofrece Excepción OutOfMemory?
  • Medición del rendimiento en Android
  • Xamarin pérdida de memoria Android con actividad simple
  • MAT que identifica una fuga en los elementos de IU que no creé
  • ¿Hay una manera de compactar memoria en android para bajar la marca de agua alta?
  • Drawable vs Single reutilizable Bitmap mejor con la memoria?
  • Android: ¿cuáles son las diferencias entre el montón de poca profundidad y el de retención
  • Cómo obtener uso de la memoria y el uso de la CPU por aplicación?
  • ¿Por qué aumenta la memoria heap al volver a iniciar una actividad?
  • Actividad ha filtrado ventana com.android.internal.policy.impl.PhoneWindow$DecorView@44f72ff0 que fue agregado originalmente aquí
  • Detectar tamaño de montón de aplicaciones en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.