【问题标题】:Correct exit from PlayN game using back button in Android在 Android 中使用后退按钮正确退出 PlayN 游戏
【发布时间】:2012-08-26 14:40:40
【问题描述】:

我无法使用返回按钮正确退出 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!.");
    }
}

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

【问题讨论】:

    标签: android exit playn


    【解决方案1】:

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

    或使用以下技术:

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

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

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

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

    【讨论】:

    • finish()this.finish() 有什么区别?
    • 这是我通常的称呼,所以我只是建议我的方式。我知道调用 finish 和 this.finish 在这种特殊情况下不会有任何区别。两者都是正确的,我认为没有必要对此投反对票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多