Ответ 1
Существует метод finishAffinity(), который завершает текущее действие и все родительские действия, но работает только в Android 4.1 или более поздней версии.
Мое приложение имеет следующий поток:
Home-> экран 1-> экран 2-> экран 3-> экран 4-> экран 5> Home-> экран 2-> Home-> экран 3
Моя проблема в том, что, когда я пытаюсь закрыть приложение, домашняя активность открывается каждый раз, когда я пытаюсь закрыть приложение.
Я просто хочу закрыть приложение, когда пользователь нажимает клавишу возврата устройства на главном экране.
Существует метод finishAffinity(), который завершает текущее действие и все родительские действия, но работает только в Android 4.1 или более поздней версии.
Это хорошо работает для меня.
Вы должны использовать флаги FLAG_ACTIVITY_CLEAR_TASK
и FLAG_ACTIVITY_NEW_TASK
.
Intent intent = new Intent(SecondActivity.this, CloseActivity.class);
//Clear all activities and start new task
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
onCreate()
метод CloseActivity
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish(); // Exit
}
Это хорошо работает для меня во всех версиях. Закройте все предыдущие действия следующим образом:
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack
intent.putExtra("Exit me", true);
startActivity(intent);
finish();
Затем в методе HomeActivity onCreate() добавьте это, чтобы завершить MainActivity
setContentView(R.layout.main_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
Вы можете попробовать запустить экран 3 с Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK
Используйте finishAffinity()
, который завершит текущее действие и все родительские действия. Но это работает только для API 16+
означает Android 4.1 или выше.
API 16+ использует:
finishAffinity();
Ниже API 16 используйте:
ActivityCompat.finishAffinity(this); //with v4 support library
Чтобы выйти из всего приложения:
finishAffinity(); // Close all activites
System.exit(0); // Releasing resources
Добавьте android:noHistory="true"
в файл манифеста активности.
Есть 2 способа решить вашу проблему
1) call finish() после startActivity (намерение) в каждом действии
2) set android: launchMode = "singleInstance" в каждом теге в файле манифеста
Я думаю, что 2-й способ лучше всего подходит для решения проблемы, но вы также можете использовать первый способ
public void onBackPressed() {
super.onBackPressed();
finishAffinity();
System.exit(0);
}
может быть этот метод лучше использовать для закрытия всей активности и чистой памяти устройства.
Чтобы очистить все действия при открытии нового, выполните следующие действия:
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Когда-то finish()
не работает
Я решил эту проблему с помощью
finishAffinity()
Не используйте
System.exit(0);
Он завершит приложение без аннуляции.