This answer, TypedArray öğesinin recycle()
yöntemini çağırmanın çöp toplanmasını sağladığını bildirir. Benim sorum, TypedArray'ın özel olarak çöp toplanması için bir yönteme neden ihtiyaç duyduğudur. Neden düzenli bir nesne gibi toplanan çöpleri beklemiyor?TypedArray neden geri dönüştürülmeli?
9
A
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.
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);
}
/** * 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