0

我正在编写一个马里奥风格的游戏,在表面视图上绘制了一组瓷砖。我创建了一个 Tile() 类,其中包含一个公共位图和一个在有动画图块时返回单个帧的方法。此类用于公共静态数组。

在增加平铺位图的数量(目前为 25 个)的同时,我在 eclipse 中收到越来越多的这些消息:

D/dalvikvm(1819): GC_CONCURRENT freed 414K, 43% free 3181K/5568K, paused 73ms+92ms,总共224ms

它开始变得相当滞后。难道我做错了什么?我想将位图保留在内存中,因为它们经常被使用。

[编辑:]我发现这条线

returnBitmap = Bitmap.createBitmap(bmpRight, pixelPos, 0, spriteBmpWidth, spriteBmpHeight);

导致这个。有没有办法避免它?:/

4

2 回答 2

0

增加 JVM 的堆大小,对于 Java 游戏来说,5M 可能非常小,如果你将 BitMaps 保存在内存中。运行你的 Java 程序,-Xmx100m将 heapSize 增加到 100M

您看到的消息来自 JVM 垃圾收集器在释放内存时的调试日志。

[编辑] 起初看不到您在 Android 上:-/

于 2013-05-16T12:42:33.353 回答
0

为了使您的图像保持活力,您需要将它们放在班级的顶部,例如:

public class A{
   Bitmap a;
   Bitmap b;
   public void ...
}

当您的 A 类正在使用时,GC 不会碰它们。如果您将在方法中创建位图 - 它们将在方法运行时存活。像这样的东西:

public void test()
{
   Bitmap a;
   Bitmap b;
} // on this moment GC will delete images from memory

您可以在此链接上阅读有关 GC 工作的更多信息

于 2013-05-16T12:46:07.707 回答