web-dev-qa-db-fra.com

comment terminer toutes les activités et fermer l'application dans Android?

Mon application a le flux suivant:

Accueil-> écran 1-> écran 2-> écran 3-> écran 4-> écran 5> Accueil-> écran 2-> Accueil-> écran 3

Mon problème est que lorsque j'essaie de fermer l'application, l'activité d'accueil s'ouvre à chaque fois que j'essaie de fermer l'application.

Je veux juste fermer l'application lorsque l'utilisateur appuie sur la touche Retour de l'appareil sur l'écran d'accueil.

16
rahul

Il existe une méthode finishAffinity () qui termine l'activité en cours et toutes les activités parent, mais elle ne fonctionne que sous Android 4.1 ou version ultérieure.

66
Ragaisis

Cela fonctionne bien pour moi.

  • Vous devriez utiliser les drapeaux FLAG_ACTIVITY_CLEAR_TASK et 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() méthode de CloseActivity activité.

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish(); // Exit 
    }
    
12
Loi Ho

Cela fonctionne bien pour moi dans toutes les versions . Fermez toutes les activités précédentes comme suit:

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();

Puis, dans la méthode HomeActivity onCreate (), ajoutez ceci pour terminer la tâche MainActivity.

setContentView(R.layout.main_layout);

if( getIntent().getBooleanExtra("Exit me", false)){
    finish();
    return; // add this to prevent from doing unnecessary stuffs
}
2
Lazy Ninja

Vous pouvez essayer de démarrer l'écran 3 avec Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK

1
iago

Utilisez la méthode finishAffinity() qui terminera l'activité en cours et toutes les activités parent. Mais cela ne fonctionne que pour API 16+ signifie Android 4.1 ou supérieur.

Utilisation de l'API 16+:

finishAffinity();

En dessous de l'API 16, utilisez:

ActivityCompat.finishAffinity(this); //with v4 support library

Pour quitter l'application entière:

finishAffinity(); // Close all activites
System.exit(0);  // Releasing resources
1
Hasib Akter

Ajoutez Android:noHistory="true" dans votre fichier de manifeste d'activité.

0
Siddharth_Vyas

Il y a 2 façons de résoudre votre problème

1) appelez finish () après le démarrageActivité (intention) dans chaque activité

2) définir Android: launchMode = "singleInstance" dans chaque balise du fichier menifest

je pense que la 2e voie est la meilleure solution, mais vous pouvez aussi utiliser la première

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

cette méthode est peut-être mieux utilisée pour fermer toute activité et nettoyer la mémoire de l'appareil.

0
Gökhan Aydın

Pour effacer toutes les activités tout en en ouvrant une nouvelle, procédez comme suit:

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