2013-06-28 14 views
5

は、私が見るとの間にどのような違いの2行は、常に一緒にせずにmyBitmap = nullを設定した場合:リサイクル()、リサイクル()

myBitmap.recycle(); 
myBitmap = null; 

私だけを使用する場合:

myBitmap = null; 

何の違い?

ありがとうございました。

+1

回答を確認する:http://stackoverflow.com/questions/6260787/diff-b-w-bitmap-recycle-and-bitmap-null – Voicu

答えて

7

ドキュメントによれば:

public void recycle() 

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

だから、基本的には、

myBitmap = null; 

は、それが指すビットマップへの具体的な言及を削除します。それが唯一の参照であれば、そのビットマップはガベージコレクタによってクリーンアップされます。

しかし、

myBitmap.recycle(); 
myBitmap = null; 

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

関連する問題