2012年8月28日火曜日

Out of Memory

Bitmapを使っているときにOut of Memoryエラーが発生
(何回か実行しているうちに、Heapが足りなくなってエラー)

ネットであちこち探しまわったが、結局解決策はない。

  bitmap.recyle();
  bitmap = null;
をやってもだめ。

GCは当てにならないらしい。
System.gc();をやってもだめ。

結局、bitmapのサイズをできるだけ小さくするしかない。
Cameraを使っているなら、PictureSizeを小さくする。
   params.setPictureSize(800,600);
画像ファイルを使うなら、縮小する

   BitmapFactory.Options opts = new BitmapFactory.Options();
   opts.inSampleSize = 2; // サイズ縮小

   Bitmap bitmap = BitmapFactory.decodeFile(file,opts);
ManifestでHeapサイズを大きくする

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
(ただしこれはエラーの発生を遅らせるだけだが)

これ以外、現在打つ手なし。

2012年8月21日火曜日

Bitmapの解放

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@407ed350

bitmap.recycle();を実行したとき、まだ使ってるから解放できない、というエラー

対策:onPauseでまとめて解放する。


@Override
public void onPause()
{
  super.onPause();
  //Bitmap解放
detect1.setImageBitmap(null);
bitmap.recycle();
bitmap = null;
}