2016-10-09 18 views
1

現在、LibGDXを使用しているアンドロイドアプリで作業しており、この1つの方法でメモリリークを特定しています。誰が私がこれがどこから来ているか把握するのを助けることができますか?私はネイティブの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

それはたくさん漏れていますか?そうでなければ、このdrawScore()はすべてのフレームで実行されていると思いますStringBuilderを代わりに使用して、それが改善するかどうかを確認してください。そうでなければ、AssetLoader.shadow.draw()とAssetLoader.font.draw()を参照する必要があります –

+0

どのようにしてリークがあると特定しましたか?ここでGCが有効であることを意味していますか? – Tenfour04

答えて

0

は最高のレンダリングは、任意の文字列の連結または他の操作をしないように、すべてのデータを事前に計算することになります。

だから、とき、スコアの変更:

  1. 更新スコア文字列フィールドに格納します。
  2. 位置を計算し、Vector2フィールドに格納します。

オンdrawScoreは、フィールドのデータのみで描画します。

GlyphLayoutもチェックして、文字列の位置をより正確に計算できます。前回と同じ原則を適用し、新規または計算を計算に使用しないでください。ただし、スコアが変更されたときに実行してください。

関連する問題