2011-08-02 6 views
0
の多くを開いたとき

可能性の重複:私は中に、ImageViewsに影響を与える
OutOfMemoryError: bitmap size exceeds VM budget :- AndroidOutOfMemoryErrorの小さな絵

私は(2Kと300Kの間に)いくつかの小さなビットマップをロードする私のアプリケーションで

私のアプリケーションの最初の起動は正常に動作しますが、終了して再起動すると、ビットマップの作成中に常にOutOfMemoryErrorが発生します。

なぜ誰かに教えてもらえますか?

答えて

0

を参照してください。たとえば、あなたのコードから、Cameraを使用してキャプチャしているimageViewにImageをペーストしようとしていることがわかります。したがって、通常、カメラの画像は大きすぎてこのエラーを明らかに上回ります。他の人が示唆しているように、画像をサンプリングするか、画像をより小さな解像度に変換して画像を圧縮する必要があります。たとえば、imageViewの幅と高さが100x100の場合、画像ビューが正確に塗りつぶされるように拡大縮小ビットマップを作成できます。あなたは、私が本当にできるように、あなたはあなたの参照がnullの場合bitmap.recycle()を使用する必要が疑う、そのためにこれを行う

Bitmap newImage = Bitmap.createScaledBitmap(bm, 350, 300,true); 

そして、あなたはあなたのビットマップをリサイクルして、このようなあなたのビットマップをゼロ、

Bitmap bmap.recycle(); 
Bitmap bmap=null; 
+0

ありがとう!私は実際になぜアンドロイドGCは他のオブジェクトのようにビットマップを扱わないと理解していない... – VinceFR

0

アクティビティから離れるときは、bitmap.recycle()を手動で使用する必要があります。

あなたのビットマップのサイズは、VMが処理できるよりも大きすぎるため、問題があるhttp://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

+0

私はこのような種類の答えを恐れていました。だから、GCはBitmap..Thanksにとってあまり役に立ちません! – VinceFR

0

することができますGC(ただし、私が間違っていることを証明してください)。

あなたのビットマップが大きすぎる可能性が高いと思います。possibly aggravated by long lived Context referencesまたはそれ以上です。