0

私の活動

protected void onDestroy(){
    super.onDestroy();
    finish();
}
public void onPause(){
    super.onPause();
    gv.gameLoopThread.setRunning(false);
    finish();
}
public void redirectHome(){

    onDestroy();
    Intent intent=new Intent(PlayActivity.this, MainActivity.class);
    startActivity(intent);
}

マイビューのクリック時。

if(gameover){
              //My Restart Button.
          if(x>(getWidth()*.39375) && x<(getWidth()*.625) &&
                  y>(getHeight()*.583333333) && y<(getHeight()*.654166667)){                  
              gameover=false;
              createSprites();
              destroyed=0;
          }
              //My Exit Button.
          if(x>(getWidth()*.39375) && x<(getWidth()*.625) &&
                  y>(getHeight()*.729166667) && y<(getHeight()*.791666667)){
              gameLoopThread.setRunning(false);
              new PlayActivity().redirectHome();
          }

      }

再起動ボタンは機能しますが、終了ボタンを使用するとアプリがクラッシュし、エラーが「Intent intent = new Intent(PlayActivity.this、MainActivity.class);」になります。および'newPlayActivity()。redirectHome();

どんな助けでも大歓迎です。

4

2 に答える 2

1

「OnDestroy()」コールバックを直接呼び出す必要はなくfinish()onDestroy()メソッドを呼び出す必要もありません。

あなたの場合、次のようにコードを変更することをお勧めします。

protected void onDestroy(){
  super.onDestroy();
}
public void onPause(){
  super.onPause();
  gv.gameLoopThread.setRunning(false);

}
public void redirectHome(){
 Intent intent=new Intent(PlayActivity.this, MainActivity.class);
 startActivity(intent);
 finish();
}

また、1つの質問:これは本当に何とか機能しているのでしょうか?finish()コールバックの呼び出しはonPause()、画面に表示される前であってもアクティビティを閉じる必要があるため、これを求めています。

とにかく、私のコードをチェックして結果についてコメントしてください)

編集:また、実際にアクティビティのインスタンスを作成してそのメソッドを呼び出すことはできないため、新しいアクティビティの開始を実行するか、このアクティビティを終了するnew PlayActivity().redirectHome();必要がありますcontextАctivity

于 2013-02-09T08:33:42.913 に答える
0

onDestroyアクティビティ参照PlayActivity.thisが無効またはnullになる可能性があるため、

toの代わりにアプリケーションコンテキストを使用してPlayActivity.this、アクティビティを開始できます。FLAG_ACTIVITY_NEW_TASK

于 2013-02-09T08:31:11.277 に答える