Как завершить все действия и закрыть приложение в Android?

Мое приложение имеет следующий поток:

Home-> экран 1-> экран 2-> экран 3-> экран 4-> экран 5> Home-> экран 2-> Home-> экран 3

Моя проблема в том, что, когда я пытаюсь закрыть приложение, домашняя активность открывается каждый раз, когда я пытаюсь закрыть приложение.

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

Ответы

Ответ 1

Существует метод finishAffinity(), который завершает текущее действие и все родительские действия, но работает только в Android 4.1 или более поздней версии.

Ответ 2

Это хорошо работает для меня.

  • Вы должны использовать флаги 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 
    }
    

Ответ 3

Это хорошо работает для меня во всех версиях. Закройте все предыдущие действия следующим образом:

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
}

Ответ 5

Используйте 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

Ответ 6

Добавьте android:noHistory="true" в файл манифеста активности.

Ответ 7

Есть 2 способа решить вашу проблему

1) call finish() после startActivity (намерение) в каждом действии

2) set android: launchMode = "singleInstance" в каждом теге в файле манифеста

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

Ответ 8

public void onBackPressed() {
    super.onBackPressed();
    finishAffinity();
    System.exit(0);
}

может быть этот метод лучше использовать для закрытия всей активности и чистой памяти устройства.

Ответ 9

Чтобы очистить все действия при открытии нового, выполните следующие действия:

Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Ответ 10

Когда-то finish() не работает

Я решил эту проблему с помощью

finishAffinity()

Не используйте

System.exit(0);

Он завершит приложение без аннуляции.