2012-08-26 60 views
3

使用后退按钮无法从PlayN GameActivity正确退出。在Android中使用后退按钮正确退出PlayN游戏

我使用下面的代码:

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关闭,但如果您再次运行游戏,它将显示两个工作线程(上一个和当前)的同一游戏的两个副本,并且在根层中您将看到两个根层的副本。

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


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

的作品,如果你没有使用PlayN.assets()。getSound(...)。在你的游戏玩(),否则所有的活动上崩溃出口。

我发现这个小的解决办法,将在本次重写的onDestroy在GameActivity方法:

@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!."); 
    } 
} 

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

回答

0

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

,或者使用以下技术:

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

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

} 

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

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

+0

'finish()'和'this.finish()'有什么区别? – nhaarman

+0

这就是我通常所说的,所以我只是建议我的方式。我知道调用完成,这个.finish在这个特殊情况下不会有任何改变。两者都是正确的,我不认为有必要对此投票。 – Mohit