reciclar significa básicamente ... liberar/borrar todos los datos asociados con el recurso correspondiente. En Android podemos encontrar reciclaje para Bitmap y TypedArray.
Si comprueba ambos archivos fuente, entonces puede encontrar una variable booleana "mReciclado" que es "falsa" (valor predeterminado). Se asigna a "verdadero" cuando se llama reciclado.
Entonces, si comprueba ese método (método de reciclaje en ambas clases), entonces podemos observar que están borrando todos los valores.
Para referencia aquí están los métodos.
Bitmap.java:
public void recycle() {
if (!mRecycled && mNativePtr != 0) {
if (nativeRecycle(mNativePtr)) {
// return value indicates whether native pixel object was actually recycled.
// false indicates that it is still in use at the native level and these
// objects should not be collected now. They will be collected later when the
// Bitmap itself is collected.
mBuffer = null;
mNinePatchChunk = null;
}
mRecycled = true;
}
}
TypedArray.java
public void recycle() {
if (mRecycled) {
throw new RuntimeException(toString() + " recycled twice!");
}
mRecycled = true;
// These may have been set by the client.
mXml = null;
mTheme = null;
mAssets = null;
mResources.mTypedArrayPool.release(this);
}
esta línea
mResources.mTypedArrayPool.release(this);
dará a conocer el TypedArray del SunchronisedPool cuyo valor predeterminado es 5. Por lo que no debería usar el mismo Array tipeado nuevamente cuando se borre.
Una vez que "mRecycled" de TypedArray es verdadero, al obtener sus propiedades lanzará RuntimeException diciendo "No se pueden realizar llamadas a una instancia reciclada".
comportamiento simliar en el caso de Bitmap también. Espero que ayude.
Nota complementaria: GC significa "recolección de basura". – Vinay
No entiendo. El último enlace hace que parezca que llamar a recycle() permite que se reutilice alguna matriz interna. ¿Esto no significa que evita que la matriz se censure?¿Por qué dices que hace que los datos asociados con "a" estén listos para GC? – gsingh2011
@ gsingh2011 le permite "ser reutilizado por un llamante posterior". Es cierto que la redacción de la documentación es un poco incómoda, pero lo que están consiguiendo es que la memoria asociada con el 'TypedArray' puede ser reutilizada por un llamante posterior (no la instancia en sí, ya que lo entiende dentro de los límites de su programa) Es por eso que la documentación también dice: "Después de llamar a esta función, no debe volver a tocar la matriz tipada". – Vinay