Android错误:内存问题?

时间:2011-07-13 02:52:16

标签: java 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)

3 个答案:

答案 0 :(得分:0)

您可能正在存储对vm内存中某些位图图像的引用,这些位图图像未在时间/活动结束时取消分配。因此no more memory可以使用。

尝试实现不在内存中存储图像的逻辑,如果图像很大,也可以尝试缩小图像。

答案 1 :(得分:0)

恕我直言,您的问题与BitmapFactory选项有关。为了节省VM资源,您最好使用BitmapFactory的特殊选项:

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

答案 2 :(得分:0)

本机堆中的位图内存不足 - 请参阅BitmapFactory OOM driving me nuts