完成旧的活动实例并启动相同活动的新实例

时间:2013-12-02 11:24:44

标签: android activity-lifecycle activity-stack

我有两个按钮“New Game”和“Resume”的MenuActivity,分别使用onClick方法newGame()和resume()

  • newGame()方法启动GameActivity并完成MenuActivity。

  • resume()方法。当resume()时,MenuActivity完成自身并且​​有效 将自动恢复GameActivity。因为它会在后面堆栈中。为什么它会在后台?在GameActivity中,onBackPressed方法启动MenuActivity,但没有完成自身,因此保持在后台堆栈中。

 public class MenuActivity extends Activity{
    ...
    public void newGame(View view){
      Intent intent = new Intent(this,GameActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      this.finish();  
  }
      public void resume(View view){
      this.finish();
  }
}
public class GameActivity extends Activity{
...
    @Override
      public void onBackPressed() {
        Intent inMain=new Intent(this, MenuActivity.class);
        startActivityForResult(inMain, 0);
    }}

方案如下:按下新游戏按钮,即MenuActivity完成并启动GameActivity。在游戏用户的某个时刻按下按钮,它将启动MenuActivity。在MenuActivity中,用户再次按下新游戏按钮。它应该完全完成GameActivity的旧实例并释放它所持有的所有内存并从头开始新的实例。但是现在当新游戏启动时,旧版本仍然在内存中,我可以从DDMS分配的内存中看到它。我如何达到我所描述的理想效果?

2 个答案:

答案 0 :(得分:0)

如果您想从GameActivity开始新的MenuActivity,请让MenuActivityGameActivity返回特殊结果代码。在GameActivity.onActivityResult()中,如果返回特殊结果代码,您应该像这样开始一个新的GameActivity

Intent intent = new Intent(this, GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

答案 1 :(得分:0)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == 1) {

 if(resultCode == RESULT_OK){      
     String result=data.getStringExtra("result");      
     //Check the result if it is resume just continue
     // else
     /* What about starting the activity from here itself */
     Intent intent = getIntent();
     finish();
     startActivity(intent);
 }
 if (resultCode == RESULT_CANCELED) {    
     //Write your code if there's no result
 }
 }
}