1

最近、関数を宣言し、次のように関数をforループに入れます。

 Bitmap image = ...//Do stuff to get image's bitmap, it's quite ok
 for(int i =0; i < someNumber; i++){
      image = doSomeThing(image, width, height);      
 }

 private Bitmap doSomeThing(image, width, height){
      int[] a = new int[10000];
      Bitmap bitmap = image.copy(sentBitmap.getConfig(), true);
      // Do some stuff here to process image
      ...
      return (bitmap);
 }

forループ引数がsomeNumber5 より小さい場合、私のアプリケーションは問題なく動作します。それ以外の場合はoutOfMemory. だから私はこれを解決するための提案を求めたいexception! 使えますSystem.gc()か?または、各ループの後に未使用のメモリを削除するために何かをすることはできますforか?

編集済み: 申し訳ありませんが、省略しすぎた可能性があります。コードを更新しました!

Edited2 :forループの代わりに call image = doSomething(...)for 複数回使用すると、exceptionもうありません!!

ありがとう!

4

2 に答える 2

1

image.recycle()for ループで処理が完了したら、おそらく呼び出す必要があります。

編集:ああ、あなたがやろうとしていることはわかります。同じ画像に複数のフィルターを適用します。これを試して:

 Bitmap image = ...;
 for(int i =0; i < someNumber; i++){
      Bitmap newImage = doSomeThing(image, width, height);
      image.recycle();
      image = newImage;
 }
于 2012-08-27T16:00:33.060 に答える
0

Java観点からは、System.gc()メモリが不足すると Java が可能な場合はメモリをクリアするため、おそらく効果はありません。

あなたのdoSomeThing()呼び出しはおそらくあなたが持っているメモリの量に対してあまりにも多くのオブジェクトを作成しています.

それを増やして、メモリフットプリントの制約のためにそれができない場合は、Edenスペースを調整してください。

于 2012-08-27T15:56:02.863 に答える