我在我的Libgdx Android游戏中遇到了一些问题。当我更改屏幕时,动画会在创建新屏幕后立即启动。它在桌面上运行得非常精细和平滑,但是当我在Android设备上运行时,在创建新屏幕时会出现延迟,看起来只是跳过几帧动画。
经过一番调查后,我发现这是因为创建新屏幕会调用许多新图像和其他要创建的对象,因此GC_FOR_ALLOC被多次调用:
04-23 20:26:11.411: D/dalvikvm(18461): GC_FOR_ALLOC freed 385K, 48% free 8809K/16880K, paused 12ms, total 12ms
04-23 20:26:11.531: D/dalvikvm(18461): GC_FOR_ALLOC freed 454K, 48% free 8867K/16880K, paused 12ms, total 12ms
04-23 20:26:11.651: D/dalvikvm(18461): GC_FOR_ALLOC freed 475K, 48% free 8903K/16880K, paused 13ms, total 13ms
04-23 20:26:11.746: D/dalvikvm(18461): GC_FOR_ALLOC freed 473K, 48% free 8942K/16880K, paused 12ms, total 13ms
04-23 20:26:11.856: D/dalvikvm(18461): GC_FOR_ALLOC freed 481K, 47% free 8967K/16880K, paused 12ms, total 12ms
所以我的问题是: 我可以以某种方式让我的应用程序等待这些操作完成,并且只有在启动动画之后才能完成吗?
事实上,我需要有能力让垃圾收集者“state”状态。或者某种东西,这样我就可以在 gc完成分配操作后启动动画。
提前感谢您的帮助!
答案 0 :(得分:1)
我不了解Libgdx,但我发现它有一个Gdx.graphics.getFramesPerSecond()方法,所以也许你只有在FPS稳定时才能开始动画。 如果该方法花费的时间太长而无法给出合适的平均值,那么您可以从getRawDeltaTime()开始测量自己的FPS。
答案 1 :(得分:0)
使用System.gc()
。文档:
当控制从方法调用返回时,Java虚拟机 我们尽最大努力从所有废弃物体中回收空间。