8

2 つの行が常に一緒になっていることがわかります。

myBitmap.recycle();
myBitmap = null;

私だけを使用する場合:

myBitmap = null;

どんな違い?

ありがとう。

4

1 に答える 1

8

ドキュメントによると:

public void recycle()

この bitmap に関連付けられたネイティブ オブジェクトを解放し、ピクセル データへの参照をクリアします。これにより、ピクセル データが同期的に解放されることはありません。他に参照がない場合は、ガベージコレクションを許可するだけです。ビットマップは「dead」とマークされます。つまり、getPixels() または setPixels() が呼び出されると例外がスローされ、何も描画されません。この操作は元に戻すことができないため、ビットマップをこれ以上使用しないことが確実な場合にのみ呼び出す必要があります。これは高度な呼び出しであり、通常、このビットマップへの参照がなくなると通常の GC プロセスによってこのメモリが解放されるため、呼び出す必要はありません。

だから基本的に、

myBitmap = null;

それが指すビットマップへの特定の参照を削除します。それが唯一の参照である場合、そのビットマップはガベージ コレクターによってクリーンアップされます。

でも、

myBitmap.recycle();
myBitmap = null;

そのビットマップのピクセル データへの非表示の参照を削除します。次に、ビットマップへの特定の参照を削除します。したがって、両方ともガベージコレクションされます。巨大なビットマップを持っている場合や、何らかの理由でメモリが限られている場合を除き、おそらく myBitmap.recycle() の呼び出しについて心配する必要はありません。

于 2013-06-28T22:37:59.810 に答える