Java 背景图像减慢android应用程序的运行速度

Java 背景图像减慢android应用程序的运行速度,java,android,performance,image,background,Java,Android,Performance,Image,Background,我是开发android应用程序的新手。我正在制作一个简单物体移动的应用程序。问题在于背景。当我这样写代码时: protected void onDraw(Canvas canvas) { BackGround1 = BitmapFactory.decodeResource(getResources(), R.drawable.lightning1); canvas.drawBitmap(BackGround1, 0, 0, null); canvas.drawCircle

我是开发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是480x800 jpg图像。
谁能告诉我我做错了什么

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!

每次绘制曲面时,您都在解码资源。这将创建许多新的
位图
对象,安卓在其上运行垃圾收集器的工作量足以在您之后进行清理

您可能只想加载资源一次,并将其存储在字段中


在更一般的意义上,您可以随时查看Logcat,以找出导致力闭合的原因。我假设如果发生崩溃,您将获得一个
OutOfMemoryException

日志猫。04-11 02:00:50.722:ERROR/dalvikvm gc(13262):无法创建1097728字节的ashmem标记堆栈:打开的文件太多04-11 02:00:50.722:ERROR/dalvikvm heap(13262):dvmheapbeginmarks失败;中止04-11 02:00:50.722:错误/dalvikvm(13262):VM中止04-11 02:00:50.902:错误/ActivityManager(92):更改机顶盒应用程序失败,这是错误代码我想我不认为他在创建任何新对象。他一遍又一遍地分配BackGround1是的,但说他正在创建许多新位图是不正确的。这些语句是:“从输入流解码一个新位图。”是的,我猜它生成了太多对象或类似的东西。通过放置此区块解决的问题:BackGround1=BitmapFactory.decodeResource(getResources(),R.drawable.lightning1);在类的开头,并从该方法中删除。谢谢你们的帮助。