如何在销毁SurfaceView后返回主要活动?

时间:2013-02-09 06:46:22

标签: java android

我的活动

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);'和'new PlayActivity()。redirectHome();

感谢任何帮助。

2 个答案:

答案 0 :(得分: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();
}

还有一个问题:这件事真的有用吗?我之所以这样问,是因为finish()回拨onPause()来电应该关闭您的活动,即使它出现在屏幕上也是如此。

无论如何,检查我的代码和评论结果)

编辑:您也无法实际创建活动实例并调用new PlayActivity().redirectHome();之类的方法,因此您需要context Аctivity来执行新活动或完成这个。

答案 1 :(得分:0)

似乎因为您onDestroy活动参考PlayActivity.this无效或无效

您可以使用应用程序上下文代替PlayActivity.this并使用FLAG_ACTIVITY_NEW_TASK

开始您的活动