我为Android编写了一个游戏。对于每个帧,我使用相同的过程。
所以我的游戏运行顺畅,但在某些时刻游戏卡住了。我在方法中使用deltaTimes进行搜索,但找不到问题并不容易。
在帧之间deltaTime的图片中:您可以看到峰值。在高峰之间,比赛顺利进行。
所以我的问题是,你知道一个探测器或类似的日食以找到峰值的原因吗?或者你知道一个网站有关于Android游戏开发的表现tipps吗? 垃圾收集器不是它,因为在调试控制台中消息不会出现。
//编辑1: 在搜索更多性能tipps之后,我添加了一个自定义主题类:
<resources>
<style name="Theme.NoBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>
这给了我更好的表现,但仍然有很高的峰值。
答案 0 :(得分:1)
这些类型的峰值的最大原因之一是当垃圾收集开始时。如果你说一个气泡的arraylist,并且每个气泡包含一个图像,你会使用一个池系统来重用泡沫而不是让垃圾收集器收集,这会导致这些峰值。
在游戏运行时应避免垃圾收集,并且应在游戏开始时加载资源。
这里的一些文章可能对您有用..
Avoid using the enhanced for-loop for ArrayLists in Android games
答案 1 :(得分:0)
您可以使用traceview查看您在哪里度过的时间
Profiling with traceview
Android提供了一些最佳实践,以提高应用程序的性能
Performance Tips
答案 2 :(得分:0)
它看起来像垃圾收集。要验证这一点,您可以过滤以&#34; GC _&#34;开头的logcat消息。在运行游戏时。
其他人已经发布了解决问题的提示,这就是我要添加的内容:查看包含new()运算符的每一行,并考虑实例创建的最终位置。如果是在比赛期间,则应该进行更改。