2012-12-10 10 views

答えて

5

これは、商品のキャッシュに必要です。 recycleに電話すると、この時点からこのオブジェクトを再利用できることを意味します。内部的にはTypedArrayには配列がほとんどないため、TypedArrayが使用されるたびにメモリを割り当てないためには、staticフィールドとしてResourcesクラスにキャッシュされます。あなたはTypedArray.recycle()メソッドのコードを見ることができます:あなたが呼び出すとき

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

だからrecycleあなたTypedArrayオブジェクトが戻ったばかりのキャッシュに返されます。

+1

/** * TypedArrayをリサイクルし、後の呼び出し元が再利用します。 *この関数を呼び出した後、入力された配列に再び触れてはいけません。 */ public void recycle(){ if(mRecycled){ 新しいRuntimeExceptionをスローする(toString()+ "2回リサイクル!"); } mRecycled = true; //これらはクライアントによって設定されている可能性があります。 mXml = null; mTheme = null; mResources.mTypedArrayPool.release(this); } – Sam003

2

@Andrei Mankevich Android SDKの最新バージョンをチェックするだけで、リサイクル()に変更が加えられたようです。以下のコードを確認してください:

/** 
* 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); 
} 
関連する問題