Modes de lancement des activités – standard
Dans les projets concrets, nous devons choisir le bon mode de lancement pour chaque activité selon nos besoins.
Il existe quatre modes de lancement :
standard, singleTop, singleTask et singleInstance
Vous pouvez définir l’attribut launchMode d’une activité dans AndroidManifest.xml
standard est le mode de lancement par défaut
Si rien n’est précisé, toutes les activités utilisent ce mode
Avec ce mode, chaque nouvelle activité est placée au sommet de la pile
Le système ne vérifie pas si cette activité existe déjà dans la pile.
Une nouvelle instance de l’activité est créée à chaque lancement
Activité principale –> Activité normale —> lancer l’activité principale (nouvelle instance)
Pour cette nouvelle activité principale, le système ignore l’instance originale
Voyons une démonstration ci-dessous
Ajoutez un bouton dans l’activité principale. Dans le gestionnaire de clic du bouton, utilisez Intent pour relancer l’activité principale
Question : on dirait qu’un seul appui sur retour suffit à fermer l’application
Quelqu’un sait pourquoi ?
Partagez votre découverte si vous trouvez la réponse.
Modes de lancement des activités – singleTop
Lorsqu’une activité est configurée en singleTop, le système vérifie avant son lancement si elle se trouve déjà au sommet de la pile de retour. Si c’est le cas, l’instance existante est réutilisée, sans créer de nouvelle instance.
Testons cela. Définissez l’attribut launchMode de l’activité principale à singleTop dans AndroidManifest.xml
Maintenant, peu importe le nombre de clics sur le bouton, aucune nouvelle instance de l’activité principale ne sera créée. Le journal ne s’affiche qu’une seule fois.
Un appui sur retour permet de quitter l’application Android
En revanche, si l’activité n’est pas au sommet de la pile, une nouvelle instance peut être créée
Modifions l’Intent pour ouvrir une autre activité en premier,
puis lançons l’activité principale depuis cette seconde activité.
Quand nous sommes sur la seconde activité, le sommet de la pile n’est pas l’activité principale, donc une nouvelle instance sera créée.
I/Choreographer: Skipped 37 frames! The application may be doing too much work on its main thread.Langage du code : HTTP (http)
Problème : le bouton retour renvoie vers le bureau (deux cours précédents)
Cela venait d’un appel supplémentaire à finish(); dans le code du bouton
Log.e(TAG, this.toString()); afficher l’adresse mémoire de l’activité actuelle
Mode singleTask
Avec singleTask, une activité ne peut avoir qu’une seule instance dans toute l’application.
À l’inverse, singleTop garantit une instance unique seulement si l’activité est au sommet de la pile.
Mode singleInstance et les tâches Task
Avec ce mode, le système crée une pile de retour indépendante pour gérer cette activité
Exemple : nous avons trois activités. Si la seconde activité est en launchMode singleInstance, elle est gérée par une pile de retour séparée.
Nous passons de l’activité 1 vers l’activité 2, puis de l’activité 2 vers l’activité 3.
Quand on appuie sur retour depuis l’activité 3, on revient d’abord à l’activité 1, car elles appartiennent à la même pile de retour.
Un nouvel appui sur retour depuis l’activité 1 nous amène vers l’activité 2. La pile de l’activité 1 est vide, le système bascule alors vers le sommet de l’autre pile de tâche, l’activité 2. Un dernier appui sur retour renvoie à l’écran d’accueil.
public void onClick(View view){
Intent it = new Intent(NormalActivity.this,Activity3.class);
startActivity(it);
finish();
}Langage du code : JavaScript (javascript)
05-13 08:14:26.890 4746-4746/com.foxdevelop.www.lifedemo E/Activité principale: 113
05-13 08:14:33.755 4746-4746/com.foxdevelop.www.lifedemo E/Activité normale: 114
05-13 08:14:37.932 4746-4746/com.foxdevelop.www.lifedemo E/Troisième activité: 113
Modes de lancement des activités