LibGDX - 从不调用暂停和处置方法

时间:2014-01-26 13:57:02

标签: android libgdx live-wallpaper

我在LibGDX上创建动态壁纸。我正在使用它的最新版本(2013年12月)。 当动态壁纸关闭或暂停时,我需要处理一些图像。 我正在使用以下课程:

public class GdxBase implements ApplicationListener, AndroidWallpaperListener, InputProcessorLW{

public abstract boolean needsGL20();

public void create() {
//works
};

public void resume() {
    Gdx.app.log("LibGDX", "resume");//works
};

public void render() {
//works
};

public void resize(int width, int height) { 
//works
};

public void pause() {
    Gdx.app.log("LibGDX", "pause"); //never called
};

public void dispose() {
    Gdx.app.log("LibGDX", "dispose"); //never called
};
}

因此,当我关闭动态壁纸时disposepause从未被调用。我在LogCat中只看到resume而不是我的WallpaperService: engine paused记录。如何调用它们?我错了什么?

可能重复:pause and dispose() not getting called in ApplicationListener in libgdx

3 个答案:

答案 0 :(得分:1)

如果是LiveWallpapers,则不会调用 pause() dispose()方法:

请参阅此http://code.google.com/p/libgdx/issues/detail?id=1348

似乎有些事情无法解决。

答案 1 :(得分:1)

我知道这是一个老问题,但您可以在扩展AndroidLiveWallpaperService并抓住壁纸引擎事件的类中使用这个小黑客:

@Override
public Engine onCreateEngine() {
    return new AndroidWallpaperEngine() {
        @Override
        public void onPause() {
            super.onPause();
            Log.i(TAG, "Pause!");
        }
    };
}

答案 2 :(得分:0)

我扩展了Odysseus提出的解决方案。

public class LibGDXWallpaperService extends AndroidLiveWallpaperService {

public class MyLibGDXWallpaperEngine extends AndroidWallpaperEngine {
    @Override
    public void onDestroy() {           
        super.onDestroy();
        engine.dispose();
    }

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

EngineCore engine;

@Override
public Engine onCreateEngine() {        
    return new MyLibGDXWallpaperEngine();       
}

@Override
public void onCreateApplication() {
    engine = new EngineCore();  
    initialize(engine, false);
    super.onCreateApplication();
}

}

engine继承自问题所述的GdxBase

public class EngineCore extends GdxBase {
    @Override
    public void pause() {
       Gdx.app.log("PAUSE", "PAUSE");       
    }

    @Override
    public void dispose() {
       Gdx.app.log("DISPOSE", "DISPOSE");       
    };
}