我已经在libgdx中创建了一个游戏应用程序,通常它运行良好,但是有时它运行缓慢,我认为这是RAM内存问题。我有一个扩展Game.class的Main类,在主类中我创建了一个播放屏幕类,当玩家死亡时,我又创建了一个播放屏幕类。我相信内存尚未释放的RAM内存会累积很多次,实际上,如果在增加内存的情况下我在任务管理器打开的情况下运行该应用程序,那么内存也会增加。
这是代码:
public class MyGdxGame extends Game(){
private PlayScreen play_screen;
private SpriteBatch batch;
public void create(){
batch=new SpriteBatch();
play_screen=new PlayScreen(this);
setScreen(play_screen);
}
public void render(){
if(play_screen.death==true){
play_screen=new PlayScreen(this);
setScreen(play_screen);
}
}
所以我做了一个测试:
public void render(){
do{
play_screen=null;
play_screen=new PlayScreen(this);
setScreen(play_screen);
}while(1!=2);
}
我在打开任务管理器的情况下运行了该应用程序,内存迅速增加直到崩溃。那么我如何清理RAM内存?
答案 0 :(得分:0)
必须手动清除许多LibGDX对象以存储内存,请参见this。他们实现了具有方法#dispose()
的接口Disposable。
我看不到您处置任何使用过的资源,您的SpriteBatch是这些对象之一。
完成后,请调用batch.dispose()
。之后将其设置为null是可选的,但建议这样做,因为使用已处置的资源可能会导致意外的行为。代码看起来像这样,当您不再需要它时应调用它:
if(batch != null) {
batch.dispose();
batch = null;
}
LibGDX内存泄漏几乎是因为没有处置一个或多个资源