¿Es necesario llamar a Bitmap.recycle () después de usarlo (en Android)?

De acuerdo con Android Documento de referencia de Bitmap.recycle() :

Libere el objeto nativo asociado con este mapa de bits y desactive la referencia a los datos de píxeles. Esto no liberará los datos de píxeles de forma sincrónica; Simplemente permite que se recoja basura si no hay otras referencias. El mapa de bits está marcado como "muerto", lo que significa que lanzará una excepción si getPixels () o setPixels () se llama y no dibujará nada. Esta operación no se puede revertir, por lo que sólo se debe llamar si está seguro de que no hay otros usos para el mapa de bits. Esta es una llamada avanzada, y normalmente no es necesario que se llame, ya que el proceso GC normal liberará esta memoria cuando no hay más referencias a este mapa de bits.

Pero, muchos libros que leí sugieren para liberar memoria llamando Bitmap.recycle () una vez que asegúrese de que ya no lo necesitan.

Me hace confundir: ¿Es necesario llamar a Bitmap.recycle() después de usado?

Depende.

Si ejecutas tu aplicación en Android 3.0 o superior, no es necesario, ya que el GC se encargará de ello perfectamente.

Sin embargo, si ejecuta su aplicación en versiones anteriores, ya que los mapas de bits no obtienen un seguimiento bien por el GC (piensa que son del tamaño de una referencia), puede obtener OOM, como se muestra en Google IO conferencia aquí .

En cualquier caso, todavía se recomienda llamar a reciclar tan pronto como esté seguro de que ya no necesita el mapa de bits. Es bueno incluso para las nuevas versiones de Android, ya que reduce el trabajo necesario para la gestión automática de memoria …

De hecho, recuerdo que he hecho una pregunta similar aquí .

Además, si necesita un control adicional de mapas de bits mediante JNI, eche un vistazo a este mensaje .

Así que, en resumen, la respuesta es que ya no es necesario, pero aún así se recomienda.

No es necesario, pero es muy recomendable! Acelerará el proceso de liberación de memoria y te salvará de la tortura con excepción de memoria perdida.

Yo diría que es obligatorio si usted va a hacer cualquier trabajo de memoria grave con Bitmaps.

Antes de Android 3.0 Bitmaps asigna la memoria nativa para almacenar sus píxeles, y las llamadas a recycle () eliminan en esa región.

Incluso con eso el GC no está garantizado para liberar esa memoria si todavía hay referencias para ella.

Pero esta llamada parece que ayuda a GC a funcionar mejor, he desarrollado una aplicación que hace un uso extensivo de la memoria y se ejecuta en nuevos dispositivos que llaman o no la aplicación se ejecuta casi lo mismo (para más viejo realmente mejora un poco de rendimiento).

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