3

我无法使用后退按钮正确退出 PlayN GameActivity。

我正在使用以下代码:

public class Loader extends GameActivity {
    public void main(){
        PlayN.run(new Game());  
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
        }
        return super.onKeyDown(keyCode, event);
    }
}

但这还不够正确。

GameActivity 关闭,但如果您再次运行游戏,它将显示具有两个工作线程(前一个和当前)的同一游戏的两个副本,并且在根层中,您将看到根层的两个副本。

我真的很愚蠢,但是如何正确地完成()以完全从内存中销毁所有内部线程/侦听器/层/音频的 GameActivity?


这个

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        this.finish();
    }
    return super.onKeyDown(keyCode, event);
}

仅当您没有在游戏中使用PlayN.assets().getSound(...).play() 时才有效,否则所有 Activity 在退出时都会崩溃。

我为此找到了一个小解决方法,您应该通过以下方式覆盖 GameActivity 中的 onDestroy 方法:

@Override
public void onDestroy() {
    super.onStop();
    try {
        super.onDestroy();
    } catch (IllegalStateException e) {
        android.util.Log.e("Easy", "JVM: playn.android.AndroidCompressedSound.MediaPlayer melts my brain!.");
    }
}

但仍然不知道为什么会发生这种异常。

4

1 回答 1

0

首先,尝试使用:this.finish(); 而不是完成();

或使用以下技术:

像这样覆盖当前活动的 onDestroy:

  @Override
protected void onDestroy() {
    super.onDestroy();
    System.runFinalizersOnExit(true);
    System.exit(0);

}

并调用它,即 this.onDestroy();

Imp:它会杀死与你的应用程序相关的所有正在进行的进程!

于 2012-08-26T16:53:22.397 回答