Andengineでシーンを切り替えを行っていると、どうも、メモリをリークしてる。以前紹介した、
で、作っている。ResourceUtil.javaのBitmapTexureが解放されていないバグは下のサイトで修正されているのだが
http://mokomiku.blog.fc2.com/blog-entry-138.html
で、BitmapTextureが解放されるはずなのだが、コメント出力して、解放を確認しても、読み込んだテクスチャ分ループして解放されていない。
[java highlight=”5″]
// プールを開放、シングルトンを削除する為の関数(シーン切り替えに行う為に修正版)
public void resetAllTexture() {
// Activity.finish()だけだとシングルトンなクラスがnullにならない為明示的にnullを代入
//System.out.println(“テクスチャ解放”);
//self = null; シーン切り替え時に使用するのでシングルトンは解放せずに使用し続けるためにそのままで・・・
textureRegionPool.clear();
tiledTextureRegionPool.clear();
if (btaPool.size() > 0) {
for (int i = 0; i < btaPool.size(); i++) {
//System.out.println("bta解放");
BitmapTextureAtlas b = btaPool.get(i);
b.unload();
b.clearTextureAtlasSources();
b = null;
}
}
btaPool.clear();
if (bbtaPool.size() > 0) {
for (int i = 0; i < bbtaPool.size(); i++) {
//System.out.println("bbta解放");
BuildableBitmapTextureAtlas b = bbtaPool.get(i);
b.unload();
b.clearTextureAtlasSources();
b = null;
}
}
bbtaPool.clear();
System.gc();
}
// プールを開放、シングルトンを削除する為の関数(ポーズと終了用)
public void resetAllTexturePause() {
// Activity.finish()だけだとシングルトンなクラスがnullにならない為明示的にnullを代入
self = null;
textureRegionPool.clear();
tiledTextureRegionPool.clear();
}
[/java]
いろいろ、試しているうちに、シーンの切り替わり時にresetAllTexture()を挟んで、self = null;を消してやり、シングルトンを解放しないようにしてみたら、シーン切り替え時にテクスチャがちゃんと解放されていくことがわかった 。そのかわり、いままで使用していたresetAllTexture()とは別に best casino online、Pauseと終了時にresetAllTexturePause()を呼ぶようにした。これで、リークすることはなくなった気がする。
もちろん、SpriteなどのDisposeやDetachはちゃんと行ったり、音関連も、releaseしてnullを突っ込んでおくべきだとおもう。