3

[戻る]ボタンを使用してPlayNGameActivityを正しく終了できません。

私は次のコードを使用しています:

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は閉じますが、ゲームを再度実行すると、2つの作業スレッド(前と現在)を持つ同じゲームの2つのコピーが表示され、ルートレイヤーにルートレイヤーの2つのコピーが表示されます。

私は本当に愚かではありませんが、finish()を正しく実行して、すべての内部スレッド/リスナー/レイヤー/オーディオをmemから完全に破壊する方法はありますか?


これ

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

ゲームでPlayN.assets()。getSound(...)。play()を使用しなかった場合にのみ機能します。使用しなかった場合、終了時にすべてのアクティビティがクラッシュします。

これに対する小さな回避策を見つけました。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(); finish() の代わりに;

または、以下の手法を使用します。

次のように、現在のアクティビティの onDestroy をオーバーライドします。

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

}

そしてそれを呼び出します。つまり、this.onDestroy();

Imp: それはあなたのアプリに関連するすべての進行中のプロセスを殺します!

于 2012-08-26T16:53:22.397 に答える