2016-10-09 166 views
1

我目前正在使用LibGDX的Android应用程序,并指出我的内存泄漏到这一个方法。任何人都可以帮我弄清楚这是从哪里来的?我曾尝试通过本地LibGDX方法回顾,但仍然无法找到泄漏的位置。谢谢内存泄漏与BitmapFont

private void drawScore() { 
    scoreLength = ("" + myWorld.getScore()).length(); 
    AssetLoader.shadow.draw(batcher, "" + myWorld.getScore(), 
      165 - (3 * scoreLength), midPointY - 82); 
    AssetLoader.font.draw(batcher, "" + myWorld.getScore(), 
      165 - (3 * scoreLength) - 1, midPointY - 83); 
} 
+0

可能是任何东西......也许你在某个时候处置了资产管理器,或者资产管理器是静态的,这可能会导致Android生命周期中的问题。也许你加载的字体不正确。你能提供更多的代码吗? – Marius

+2

它泄漏了很多吗?如果没有,它可能只是你做的String concat,因为我猜这个drawScore()是每帧完成的?尝试使用StringBuilder来查看它是否有更好的结果。如果没有,我们需要看AssetLoader.shadow.draw()和AssetLoader.font.draw() –

+0

你是如何识别泄漏的?你的意思是说GC在这里很活跃吗? – Tenfour04

回答

0

最好是预先计算所有的数据,以便渲染不做任何字符串连接或其他操作。

所以,当比分变化:

  1. 更新得分字符串,并将其存储在一个领域;
  2. 计算位置并将其存储在Vector2字段中。

drawScore只能从字段中获取数据。

您还可以检查GlyphLayout以更好地计算字符串的位置。应用与以前相同的原则,不要在绘图中使用新的或计算,但在分数改变时使用它们。