Завершите старый экземпляр действия и запустите новый экземпляр того же действия

У меня есть MenuActivity с двумя кнопками «Новая игра» и «Возобновить» с методами onClick newGame() и возобновить() соответственно.

  • Метод newGame() запускает GameActivity и завершает MenuActivity.

  • метод возобновления(). При возобновлении () 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. Как мне достичь желаемого эффекта, как я описал?


person Nazerke    schedule 02.12.2013    source источник
comment
В MenuActivity вы запускаете FireRoomActivity, а не GameActivity, как вы описали.   -  person Melquiades    schedule 02.12.2013
comment
да спасибо. Я забыл изменить имя. Но это не проблема   -  person Nazerke    schedule 02.12.2013
comment
Покажите свой манифест, пожалуйста.   -  person David Wasser    schedule 02.12.2013


Ответы (1)


Если вы хотите начать новый GameActivity с вашего MenuActivity, то просто пусть MenuActivity вернет специальный код результата в GameActivity. В GameActivity.onActivityResult(), если возвращается специальный код результата, вы должны начать новый GameActivity следующим образом:

Intent intent = new Intent(this, GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
person David Wasser    schedule 02.12.2013
comment
Вы имеете в виду наличие в MenuActivity.newGame(){ setResult(RESULT_CLOSE_ALL); это.финиш(); } и в GameActivity.onActivityResult(){ switch(resultCode) { case RESULT_CLOSE_ALL: намерение намерения = новое намерение (это, GameActivity.class); намерение.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(намерение); финиш();} ??? - person Nazerke; 02.12.2013
comment
Но это закроет мое приложение, когда я запущу игру в первый раз, так как в стеке ничего нет. - person Nazerke; 02.12.2013
comment
Я так не думаю. Он снова запускает GameActivity. - person David Wasser; 02.12.2013