リサイクルは基本的に対応するリソースに関連するすべてのデータを消去/消去することを意味します。 AndroidではBitmapとTypedArrayのリサイクルが見つかります。
両方のソースファイルをチェックすると、 "false"(デフォルト値)のブール変数 "mRecycled"を見つけることができます。リサイクルが呼び出されると "true"に割り当てられます。
だから、そのメソッド(両方のクラスでメソッドをリサイクルする)をチェックすると、すべての値がクリアされていることがわかります。
ここで参考にしてください。
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);
}
このライン
mResources.mTypedArrayPool.release(this);
は、そのデフォルト値は、あなたがそう5. あるSunchronisedPoolからtypedArrayをリリースする予定それがクリアされるときに同じtypedArrayを再び使用すべきではありません。
TypedArrayの "mRecycled"が一度trueになると、そのプロパティを取得している間に、「リサイクルされたインスタンスを呼び出せません!」というRuntimeExceptionがスローされます。
ビットマップの同様の動作も同様です。 お手伝いをしてください。
サイドノート:GCは「ガベージコレクション」の略です。 – Vinay
私は分かりません。最後のリンクは、recycle()を呼び出すと内部配列を再利用できるように見えます。配列がGCされないようにすることはできませんか?なぜ "a"に関連するデータをGCの準備ができていると言いますか? – gsingh2011
@ gsingh2011それはそれが "後の呼び出し元によって再利用される"ことができます。確かにドキュメントの文言はちょっと厄介ですが、彼らが得ているのは、 'TypedArray'に関連するメモリを後の呼び出し元が再利用できるということです(プログラムの範囲内で理解するようにインスタンス自体ではありません)。そのため、ドキュメントでは「この関数を呼び出した後に、型指定された配列に再び触れてはいけません。 – Vinay