Intereting Posts

Intent.FLAG_ACTIVITY_CLEAR_TOP не удаляет стек активности

Я разрабатываю приложение, в котором я хочу закрыть все приложение при нажатии кнопки. Я знаю, что в андроиде мы не должны думать о закрытии приложения, потому что андроид делает это автоматически из этого. Является ли отказ от приложения нахмурившимся? , Но все же я хочу закрыть свое приложение.

Итак, что я делаю, чтобы закрыть приложение, я использую флаг Intent.FLAG_ACTIVITY_CLEAR_TOP для удаления стека действий.

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

И в onCreate of FinishActivity.class я this.finish() но приложение не закрывается, и предыдущая активность снова открывается.

FinishActivity.class

 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.finish(); } 

Обновить :

Вот сценарий

 MainActivity->Activity2->Activity3->FinishActivity 

Здесь Activity2 открывается после завершения операции.

Как мне это достичь? Любая идея и предложение будут оценены.

С уважением

Solutions Collecting From Web of "Intent.FLAG_ACTIVITY_CLEAR_TOP не удаляет стек активности"

Использовать это–

  Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish(); 

Отредактировано – Новый ответ и будет работать отлично ..

Просто взяв пример … сделайте это соответственно, что ваш проект нуждается –

Я беру три класса Activity A, B и C .. и я применил кнопку закрытия в представлении класса C Activity. Если вы хотите, то кнопкой Back вы можете перейти к предыдущему действию и когда вы нажмете кнопку закрытия, то вы Выйдет из приложений … есть взгляд –

 public class AActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent i = new Intent(this, B.class); startActivityForResult(i, 1); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { finish(); } } 

}

Возьмите следующую классную деятельность –

  public class B extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); Intent i = new Intent(this, C.class); startActivityForResult(i, 2); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { setResult(5); finish(); } } 

}

Возьмите последнюю активность –

  public class C extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c); } // close button..set by xml view..you can set it by button listener. public void close(View v) { setResult(5); finish(); } 

}

Надеюсь, это решит вашу проблему.

Попробуй. Это должно очистить ваш стек активности.

 Intent i = new Intent(this,MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); 

Это, наконец, помогло мне в 100% случаев. Я пробовал все флаги автономно, никогда не работал для всех экземпляров кода. Использую все флаги везде, где я хочу эту функциональность, около 5 разных мест, и теперь она работает.

  Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); 

Из документации для Intent.FLAG_ACTIVITY_CLEAR_TOP

Если установлено, и запущенная деятельность уже запущена в текущей задаче, то вместо запуска нового экземпляра этого действия все остальные действия поверх нее будут закрыты, и этот намерение будет доставлен в (теперь Наверх) старая деятельность как новое намерение.

Поэтому, чтобы заставить его работать, FinishActivity должен быть первым в вашем стеке активности. В любом другом случае это решение не даст вам ничего.

Вы должны выполнить несколько шагов для этого:

1) Сделайте FinishActivity активным.

2) Не предоставляйте никакого представления для него и начинайте сначала. Activity вашего приложения непосредственно из callback onCreate :

3) Переопределить onRestart вызов onRestart :

Пример кода:

 private boolean isNeedToContinue = true; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); } @Override protected void onResume() { super.onResume(); if (isNeedToContinue) { startActivity(new Intent(this,FirstVisibleActivity.class)); isNeedToContinue = false; } else { finish(); } } @Override protected void onRestart() { super.onRestart(); finish(); isNeedToContinue = false; } 

Думаю, это все, что вам нужно. Удачи!

SetFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

Кроме того, что set launchMode для «singleTop» в определении FinishActivity в xml, перезаписать методNewIntent, вы можете передать некоторую дополнительную информацию как часть намерения, instated для завершения вашей деятельности в onCreate, закончить ее в onNewIntent метод активности, основанный на некотором сигнале от вызова Или просто закончить его на основе ваших потребностей. Возможно, ваши другие действия могут иметь разные lauchmodes, поэтому они не заканчиваются.

Это сработало для меня:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 

Попробуйте, как этот путь, это работа для меня:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

Вместо вашего кода

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

Попробуй это:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 

Поскольку другие ответы должны работать следующим образом.

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Для уровня API <11 Intent.FLAG_ACTIVITY_CLEAR_TASK недоступен. Вместо этого я использовал IntentCompat.FLAG_ACTIVITY_CLEAR_TASK из библиотеки поддержки.

См. IntentCompat

Может помочь кому-то споткнуться.