example - convertir imagen a bitmap android
¿Por qué nunca usaría la opción inPurgeable de BitmapFactory? (4)
Para que se vuelva a realizar la decodificación, el mapa de bits debe tener acceso a los datos codificados, ya sea al compartir una referencia a la entrada o al hacer una copia de la misma.
Si ya no tienes acceso a los datos codificados, entonces esto podría ser un problema ¿no? ¿Qué pasaría si estuvieras decodificando bitmaps en vivo desde un ByteArray de transmisión y tu aplicación simplemente decide reclamar la memoria, no haría eso que tu Bitmap pierda esos píxeles?
BitmapFactory.Options.inPurgeable
ha recomendado BitmapFactory.Options.inPurgeable
de Android en varios lugares como una forma de evitar excepciones de OutOfMemory en Android 2.x y versiones anteriores (Android 3.1 corrige esto ).
Si inPurgeable
es tan bueno, ¿por qué NO querría usarlo alguna vez? La documentación parece muy poco clara sobre los detalles sobre lo que esta opción está haciendo:
Si esto se establece en verdadero, el mapa de bits resultante asignará sus píxeles de manera que se puedan purgar si el sistema necesita reclamar memoria. En ese caso, cuando se necesita acceder nuevamente a los píxeles (p. Ej., Se dibuja el mapa de bits, se llama a getPixels ()), se volverán a decodificar automáticamente
Parece genial. ¿Cuál es el truco?
Esta bandera actualmente se ignora por completo, esa es la trampa.
Actualización por @slodge: por favor, cualquiera que esté leyendo esto y viéndolo como la respuesta correcta, también lea los comentarios: ''Este indicador está completamente ignorado'' es cierto solo en ciertos casos, en otros casos (por ejemplo, cuando se usa decodeByteArray
en datos descargados) entonces esta bandera no se ignora y es muy, muy útil
La documentación se ha actualizado posteriormente con información adicional que aborda su pregunta original.
Resumen: el uso de esta bandera ya no se recomienda.
Si estás leyendo tus mapas de bits desde el sistema de archivos, usar esta bandera obligará a Android a mantener el archivo abierto (al menos en 4.0.4) para poder volver a leerlo. Después de leer más de 1024 archivos, alcanzará el límite de archivos abiertos y obtendrá el error "Demasiados archivos abiertos".
Puede observar el comportamiento de beacon utilizando el comando lsof
desde un terminal rooteado y revisar todos los archivos abiertos.