2012-12-10 9 views

Antwort

5

Dies ist für die Zwischenspeicherung erforderlich. Wenn Sie recycle aufrufen, bedeutet dies, dass dieses Objekt von diesem Punkt aus wiederverwendet werden kann. Intern enthält TypedArray nur wenige Arrays. Um nicht jedes Mal Speicher zuzuweisen, wenn TypedArray verwendet wird, wird es in der Klasse Resources als statisches Feld zwischengespeichert. Sie können an TypedArray.recycle() Methode Code aussehen:

/** 
* 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; 
     } 
    } 
} 

Also, wenn Sie recycle Ihr TypedArray Objekt aufrufen wird gerade in den Cache zurück.

+1

/** * Bereiten Sie die TypedArray, durch einen späteren Anrufer wiederverwendet werden. Nach dem Aufruf * dieser Funktion dürfen Sie das typisierte Array nicht mehr berühren. */ public void recycle() { if (mRecycled) { throw new Runtime (toString() + "recycelt zweimal!"); } mRecycled = wahr; // Diese wurden möglicherweise vom Client festgelegt. mXml = null; mTheme = null; mResources.mTypedArrayPool.release (this); } – Sam003

2

@Andrei Mankevich Ich überprüfe nur die neueste Version von Android SDK, und es scheint, es gibt einige Änderungen zu recyceln(). Bitte überprüfen Sie die folgenden Codes:

/** 
* 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); 
}