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.
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.
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
}
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
}
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
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
Ajoutez Android:noHistory="true"
dans votre fichier de manifeste d'activité.
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
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.
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);