所以我遇到了一些错误,我已经搜索过了。看来我有一些记忆问题。但我不太确定如何解决它。这是我认为问题所在的代码以及错误日志。任何帮助将受到高度赞赏
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 :(得分: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