2

我的 MenuActivity 有两个按钮“新游戏”和“恢复”,分别带有 onClick 方法 newGame() 和 resume()

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

  • 恢复()方法。当 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 分配的内存中看到它。我将如何达到我所描述的理想效果?

4

2 回答 2

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
 }
 }
}
于 2013-12-02T12:00:08.393 回答
0

如果你想GameActivity从你的新开始MenuActivity,那么只需MenuActivity返回一个特殊的结果代码到GameActivity. 如果GameActivity.onActivityResult()返回特殊结果代码,你应该GameActivity像这样开始一个新的:

Intent intent = new Intent(this, GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
于 2013-12-02T11:36:24.947 回答