2012-08-26 103 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