gpt4 book ai didi

java - LibGdx RAM 使用量持续增加

转载 作者:行者123 更新时间:2023-12-01 13:08:56 24 4
gpt4 key购买 nike

我编写了这 3 个类来在 Android 上测试它们。如果我只是按菜单按钮并隐藏应用程序,然后再次打开它,然后隐藏并再次重新打开它,每次隐藏应用程序时,内存使用量都会增加。

如果我只是在应用程序内的类之间切换,也会出现同样的问题,应用程序使用越来越多的内存。

我在这里寻找这个问题的解决方案,我在 yotube 上看到了教程,但我还没有找到。我不明白这里出了什么问题。

有人可以解释一下我做错了什么吗?

public class MyEF extends Game {

@Override
public void create() {

setScreen(new TestScreen1(this));
}

@Override
public void dispose() {
super.dispose();
}

@Override
public void render() {
super.render();
}

@Override
public void resize(int width, int height) {
super.resize(width, height);
}

@Override
public void pause() {
super.pause();
}

@Override
public void resume() {
super.resume();
}

}

// TEST1
public class TestScreen1 implements Screen {

private MyEF game;

public TestScreen1(MyEF game) {
this.game = game;
}

@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

if(Gdx.input.justTouched()){
game.setScreen(new TestScreen2(game));
dispose();
System.out.println("TOUCHED ");
}

}

@Override
public void show() {
}

@Override
public void dispose() {
game.dispose();
}

@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void resize(int width, int height) {
}
}

// TEST2
public class TestScreen2 implements Screen {

private MyEF game;

public TestScreen2(MyEF game) {
this.game = game;
}

@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

if(Gdx.input.justTouched()){
game.setScreen(new TestScreen1(game));
dispose();
System.out.println("TOUCHED ");
}

}

@Override
public void show() {
}

@Override
public void dispose() {
game.dispose();
}

@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void resize(int width, int height) {
}
}

最佳答案

因此,我没有任何静态屏幕。 “重置”屏幕会引入错误,并且代码不太容易维护。在许多情况下,创建一个新的“干净”屏幕会更容易。

您还在此处描述了一种效果。不是问题。是的,内存使用量增加。但这有问题吗?不!为什么不?因为用户不会将应用程序发送到后台并连续重新启动它 1000 次。而且即使他这样做了,内存使用量也不会无休止地增长。它不断增长,因为添加的内存量非常小,以至于 JVM 甚至不会调用垃圾收集器。

经过足够的迭代恢复应用程序后,垃圾收集器最终将启动并清理所有未使用的屏幕。

一般来说,您现在不应该根据这种行为更改您的架构。根据经验,您始终可以实例化新对象,例如在切换屏幕时或仅执行一次操作时。如果垃圾收集器在加载屏幕中启动或游戏刚刚开始时,用户不会感到困扰。仅当在 render() 方法中执行此操作时才应该担心,因为垃圾收集器可能会在实际游戏过程中进行清理,并可能导致滞后。

关于java - LibGdx RAM 使用量持续增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23046949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com