2012-05-06 15 views
0

ビットマップから画像を拡大縮小すると、アプリケーションがシャットダウンします。
だから私はタブを見たLogCat
私は、その理由がメモリオーバーフローであることがわかりました。
私は新しい方法で作成されたメモリを解放する方法を知らなかった。
ガベージコレクションが機能しません。ここで画像のスケールが原因でメモリーオーバーフローエラー

Runtime.getRuntime().freeMemory(); 

matrix.reset(); 

curScale += 0.02f; 

h = orgImage.getHeight(); 

w = orgImage.getWidth(); 

matrix.postScale(curScale, curScale); 

rtnBitmap = Bitmap.createBitmap(orgImage, 0, 0, w, h, matrix, true); 

curImageView.setImageBitmap(rtnBitmap); 

calculate(-0.02f); 

問題がrtnBitmap次のとおりです。次のように

コードがあります。これを追加するだけでなく、私も関数recycle()を使用しました。しかし、それは動作しませんでした。
私はあなたのお手伝いをします。

ありがとうございます。

+0

古いオブジェクトを参照するすべての変数を 'null 'に設定して解放しようとしましたか? –

+0

イメージ(ビットマップ、圧縮されていない)の大きさはどれですか?また、どのデバイスを実行しているのですか?また、コード内に大量のメモリを占有している他のものがありますか? – snapfractalpop

+0

ありがとうございます。古いオブジェクトを解放するには?私はガベージコレクションを使用してJavaを知っています。したがって、リリース機能はありません。私はimage.recycle()を使用しましたが、結果は同じです。スケールダウンするとエラーは発生しません。私はwhileループでこれを使用しました。カウンタが3を超えると、プロセスは強制終了されます。イメージを拡大縮小するためにimage.createbitmap()を使用する他の方法はありますか?私はアンドロイドのために新しい人だから使っています。 – user1304842

答えて

0

NULLでなければ、使用する前にrtnBitmap.recycle();を使用してください。

+0

ありがとうございます。私はそれを試みます。しかし、それは実行時に同じです。 – user1304842

+0

実行中です。私はこれを "while"に使っています。カウンターが3を超えると、プロセスは強制終了されます。画像を拡大縮小する他の方法はありますか? Bitmap.createbitmap()を使用しないでください。 – user1304842

+0

whileループの先頭にこのコードを使用します。あなたはそれをしましたか? – breceivemail