我在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
};
}
因此,当我关闭动态壁纸时dispose
或pause
从未被调用。我在LogCat中只看到resume
而不是我的WallpaperService: engine paused
记录。如何调用它们?我错了什么?
可能重复:pause and dispose() not getting called in ApplicationListener in libgdx
答案 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");
};
}