2011-07-13 5 views
0

私はいくつかのエラーに遭遇し、私はそれを検索しました。私はいくつかのメモリの問題があるようです。しかし、それを解決する方法についてはあまりよく分かりません。ここに私はどこに問題があると信じているコードとエラーログもあります。以下のいずれかの助け高く評価されるだろうAndroidのエラー:メモリの問題?

static List<Dragon> mdragon = new ArrayList<Dragon>(); 
private int mdragon_number = 0; 

    @Override 
public boolean onTouchEvent(MotionEvent event) { 
    synchronized (mdragon) { 
     mdragon.add(new Dragon(getResources(), (int) event.getX(), 
       (int) event.getY())); 
     mdragon_number = mdragon.size(); 
    } 
    return super.onTouchEvent(event); 
} 

public void Remove(long elapsed, Canvas canvas) { 
    synchronized (mdragon) { 
     List<Dragon> toRemove = new ArrayList<Dragon>(); 
     for (Dragon dragon : mdragon) { 
      if (Condition to remove an element) 
       toRemove.add(dragon); 
      } 
      mdragon.removeAll(toRemove); 
    } 
} 

エラーログ:

07-13 02:11:46.814: ERROR/AndroidRuntime(280): FATAL EXCEPTION: main 
07-13 02:11:46.814: ERROR/AndroidRuntime(280): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.Bitmap.nativeCreate(Native Method) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:346) 
07-13 02:11:46.814: ERROR/AndroidRuntime(280):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:372) 

答えて

0

はおそらく時間/ときの活動に割り当て解除取得されていませんVMのメモリ内のいくつかのビットマップ画像への参照を格納しています終了する。従ってno more memoryは遊ぶために残される。

イメージをメモリに格納しないロジックを実装してみましょう。また、イメージが大きくなっている場合は縮小してみてください。

0

IMHO問題はBitmapFactoryオプションに関連しています。あなたがより良いBitmapFactoryのための特別なオプションを使用したいVMのリソースを節約するために:

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inPurgeable=true; //declare as purgeable to disk 
Bitmap bitmap=BitmapFactory.decodeResource(context, R.drawable.myDrawable, options);