0

こんにちは、私はライブ壁紙を開発しており、多くのビットマップを使用しています。新しいライブ壁紙を約 1 週間テストしましたが、完全に稼働していましたが、市場にアップロードするとすぐに、この種の例外が発生し 続けjava.lang.OutOfMemoryErrorます。私はこの種のビットマップのライフサイクルを使用します:android.graphics.Bitmap.nativeCreateandroid.graphics.BitmapFactory.nativeDecodeAsset

次のような参照を作成します。

Bitmap dark = null;
Bitmap cave = null;

私はonCreateEngineそれらを次のように初期化します:

cave = BitmapFactory.decodeResource(getResources(), R.drawable.cave);
dark = BitmapFactory.decodeResource(getResources(), R.drawable.dark);

ここで例外をスローします。これらの画像の場合: バックグラウンド暗くなる雲. 結局、次のようにキャンバスに描画します。

canvas.save();
canvas.drawBitmap(bg, new Matrix(), new Paint());   
canvas.drawBitmap(dark, new Matrix(), new Paint()); 
canvas.restore();

私は何をすべきか?暗い画像を1枚だけロードして、キャンバスの幅*高さの倍に描画する方が良いですか? または何か方法はありますか?と思っrecycleたり呼んだりonDestroy。しかし、例外がスローされるため、それらを呼び出すタイミングがわかりませんonCreate。画像が大きすぎますか? そして、なぜ私のデバイスではスムーズに動作し、他のデバイスでは例外をスローしているのでしょうか? ビットマップは 1484*1484 次元で、雲は 250*172 次元ですが、2^x * 2^x 次元である必要がありますか?

4

1 に答える 1

1

メモリ オプティマイザーを使用して、メモリ リークを作成している場所を確認してください。これにはEclipse Memory Analyzer(MAT)を使用できます。ビットマップの使用に関する非常に一般的な問題です。BitMap を使用する場合は、メモリ リークに特に注意する必要があります。

于 2013-06-17T08:46:35.877 に答える