2012-12-10 8 views

cevap

5

Bu, önbelleğe alma için gereklidir. recycle'u aradığınızda, bu nesnenin bu noktadan yeniden kullanılabileceği anlamına gelir. Dahili olarak TypedArray, TypedArray kullanıldığında her zaman bellek ayırmamak için birkaç dizi içerir ve sınıfında statik alan olarak önbelleğe alınır. Sen TypedArray.recycle() yöntem koduna bakabilirsiniz: Görüşme sırasında

/** 
* Give back a previously retrieved StyledAttributes, for later re-use. 
*/ 
public void recycle() { 
    synchronized (mResources.mTmpValue) { 
     TypedArray cached = mResources.mCachedStyledAttributes; 
     if (cached == null || cached.mData.length < mData.length) { 
      mXml = null; 
      mResources.mCachedStyledAttributes = this; 
     } 
    } 
} 

Yani recycle sizin TypedArray nesne sadece geri önbelleğe döndürülür.

+1

/** * sonraki bir arayan tarafından yeniden kullanılmak üzere TypedArray, geri dönüştürün. * numaralı telefonu aradıktan sonra * yazdığınız diziye tekrar dokunmanız gerekmez. */ public void recycle() { (mRecycled) { yeni RuntimeException (toString() + "iki kez geri dönüştürülmüş!"); } mRecycled = true; // Bunlar, istemci tarafından ayarlanmış olabilir. mXml = null; mTheme = null; mResources.mTypedArrayPool.release (this); } – Sam003

2

@Andrei Mankevich Sadece Android SDK'nın en yeni sürümünü kontrol ediyorum ve geri dönüşüme() dönüşen bazı değişiklikler var gibi görünüyor. Aşağıdaki kodları kontrol edin:

/** 
* Recycle the TypedArray, to be re-used by a later caller. After calling 
* this function you must not ever touch the typed array again. 
*/ 
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; 

    mResources.mTypedArrayPool.release(this); 
}