java - (LIBGDX) 如何清理我的应用程序使用的 RAM 内存?

标签 java android memory libgdx

我在 libgdx 中创建了一个游戏应用程序,通常它运行良好,但有时它会慢动作,在我看来是 RAM 内存问题。我有一个扩展 Game.class 的主类,在主类中我创建一个播放屏幕类,当玩家死亡时我再次创建播放屏幕类。我相信内存尚未释放并且在多次死亡后会累积的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 内存呢?

最佳答案

许多 LibGDX 对象必须手动清除内存,请参阅 this 。他们实现了接口(interface)Disposable其中有方法#dispose()

我没有看到您处置任何使用过的资源,您的 SpriteBatch 是这些对象之一。 完成后,调用 batch.dispose()。之后将其设置为 null 是可选的,但建议这样做,因为使用已处置的资源可能会导致意外行为。该代码看起来像这样,当您不再需要它时应该调用它:

if(batch != null) {
    batch.dispose();
    batch = null;
}

LibGDX 内存泄漏几乎总是因为一个或多个资源未释放

关于java - (LIBGDX) 如何清理我的应用程序使用的 RAM 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931026/

相关文章:

java - 从对象数组列表中获取最大值?

java - 在 jOOQ 中注册全局转换器

java - 奇怪的界面设计Java

android - 无失真/拉伸(stretch)的全屏相机预览

iPhone 应用程序由于内存不足而崩溃,但在模拟器中运行良好

c++ - 使用智能指针时如何跟踪内存分配

c - 为传递给函数的数组指针初始化内存时出现段错误

java - 几秒钟后启用“无选项”

android - 旋转动画保持回到默认状态

javascript - 在为 android 设备运行代码时,使用 java 从 Eclipse 下拉列表中的多个选项中选择一个选项