2

Android で画像のリサイクルはどのように機能しますか?

詳しく説明させてください:

私が以下を持っている場合:

myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);

そして、以下をログに記録します

Log.v("ImageStuff","Image is: "+myBitmap);

次の結果が得られます。

Image is: android.graphics.Bitmap@(ResourceID here)

これは素晴らしいことですが、同じことをしてもリサイクルをそのように呼び出すと

myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
myBitmap.recycle()

上記と同じ結果が得られます。recycle を呼び出すとビットマップがクリアされるので、null としてログに記録されると思いましたか?

また、次のようなビットマップを取るメソッドがある場合:

public void doStuff(Bitmap pic){

//Code here

}

上記のようにビットマップを作成し、doStuff に送信します。

myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
doStuff(myBitmap);

画像をリサイクルしたい場合、myBitmap.recycle(); を呼び出す必要がありますか? pic.recycle と同様に (終了後の doStuff メソッド内で)。

4

2 に答える 2

1

User117 のコメントを拡張するには:

1) ビットマップは、画像データの単なるコンテナーです。recycle を呼び出すと、すべての画像データが削除されますが、コンテナーは保持されます。

2) ビットマップへの参照を渡すだけの doStuff メソッドに Bitmap を渡す場合、オブジェクトが同じであるため、recycle を 2 回呼び出す必要はありません。不要になった場合は、doStuff を呼び出した後、myBitmap で recycle を呼び出すだけです。

于 2013-03-04T15:05:52.857 に答える
1

Bitmapobject には画像データ (内部で割り当てられたピクセル値) が含まれていますが、それ自体は画像データではありません。そのため、Bitmapオブジェクトは の後にぶらぶらすることができますがrecycle()、データを操作しようとするとエラーがスローされます。

recycle()あなたや他のオブジェクトがビットマップを使用しなくなったときに呼び出します。myBitmap = nullオブジェクト自体をガベージ コレクションするように設定することもできます。

于 2013-03-04T15:04:48.657 に答える