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.

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