我是开发android应用程序的新手。我正在制作一个简单的对象移动的应用程序。问题出在背景上。当我像这样放入代码时:
protected void onDraw(Canvas canvas) {
BackGround1 = BitmapFactory.decodeResource(getResources(), R.drawable.lightning1);
canvas.drawBitmap(BackGround1, 0, 0, null);
canvas.drawCircle(xp, yp, circleRadius, circlePaint);
}移动的物体(圆圈)明显减慢,过了一段时间(比如20秒),开始出现圆圈的痕迹,然后(~10秒)“崩溃”,回到之前的活动。
如果我把
canvas.drawColor(Color.BLACK);
而不是
canvas.drawBitmap(BackGround1, 0, 0, null);,那么一切都很好。lightning1是480x800jpg的图像。
有人能告诉我我哪里做错了吗?
04-11 02:00:50.722: ERROR/dalvikvm-gc(13262): Could not create 1097728-byte ashmem mark stack: Too many open files
04-11 02:00:50.722: ERROR/dalvikvm-heap(13262): dvmHeapBeginMarkStep failed; aborting
04-11 02:00:50.722: ERROR/dalvikvm(13262): VM aborting
04-11 02:00:50.902: ERROR/ActivityManager(92): fail to set top app changed!发布于 2011-04-11 06:51:47
每次绘制表面时,您都在对资源进行解码。这会创建许多新的Bitmap对象,而安卓有足够多的工作来运行垃圾收集器来清理你的垃圾。
您可能只想加载资源一次,并将其存储在字段中。
在更一般的意义上,您可以随时查看Logcat以找出导致强制关闭的原因。我假设你会得到一个OutOfMemoryException。
https://stackoverflow.com/questions/5615224
复制相似问题