Comprendre le mode de lancement de l’activité dans Android

Partager c’est prendre soin!

Le mode de lancement de l’activité joue un rôle important pour maintenir la tâche et la pile arrière. Avant d’expliquer le mode de lancement, nous devons d’abord comprendre ce qu’est la tâche et la pile arrière ?

Tâche

Une tâche est une « pile d’activités » dans votre application. Si une activité est envoyée en arrière-plan (en appuyant sur la touche HOME tout en la visualisant, par exemple), alors l’ensemble de la tâche (et toutes les activités qu’elle contient) sera également renvoyée. Si l’utilisateur clique ensuite sur votre application, la tâche (et l’ordre de ses activités) revient en avant. En d’autres termes, une tâche est un ensemble d’activités avec lesquelles les utilisateurs interagissent lorsqu’ils effectuent un certain travail. Les activités sont disposées dans une pile – la pile arrière)- dans l’ordre dans lequel chaque activité est ouverte.

Donc, fondamentalement, quand un utilisateur lance une application à partir de l’icône d’accueil, il navigue à travers différents écrans donc différentes activités placées les unes sur les autres. Cette collection d’activités est connue sous le nom de tâches.

Back Stack

Les activités sont organisées dans l’ordre dans lequel chaque activité est ouverte. Cette pile maintenue est appelée Back Stack. Lorsque vous démarrez une nouvelle activité en utilisant startActivity(), cela « pousse » une nouvelle activité sur votre tâche, et met l’activité précédente dans la pile arrière.

Une fois que vous appuyez sur le bouton retour alors « pops » l’activité la plus élevée et la retirer de la pile arrière et vous ramener à l’activité précédente.

Launch Mode

Un « mode de lancement » est la façon dont une nouvelle instance d’une activité doit être associée à la tâche actuelle. Les modes de lancement peuvent être définis en utilisant l’un des deux mécanismes suivants :

  1. Par déclaration dans le fichier AndroidManifest.xml
  2. Par ajout de l’indicateur avec Intent.

Il existe quatre types si mode de lancement d’activité. Ce sont :

  1. standard
  2. singleTop
  3. singleTask
  4. SingleInstance

Fichier manifeste : Lorsque vous déclarez une activité dans un fichier manifeste, vous pouvez spécifier comment l’activité doit s’associer à des tâches lorsqu’elle démarre.

Exp:

<activity android:launchMode = ../>

Frappe d’intention : Android fournit également des drapeaux d’activité par lesquels vous pouvez modifier le comportement par défaut de l’association de l’activité avec les tâches lors de son démarrage via la méthode startActivity(). Ces valeurs de drapeaux peuvent être passées par des données supplémentaires Intent.

FLAG_ACTIVITY_NEW_TASK -> similar to "launchMode = singleTask"FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_SINGLE_TOP -> similar to "launchMode = singleTop"FLAG_ACTIVITY_CLEAR_TOP

standard (par défaut) : C’est le mode commun pour la plupart des activités.Plusieurs instances de la classe d’activité peuvent être instanciées et plusieurs instances peuvent être ajoutées à la même tâche ou à différentes tâches.

Exemple:
Supposons que vous avez des activités A, B, C et D et que votre activité B a « mode de lancement = standard ». Maintenant vous lancez à nouveau l’activité B –
État de la pile d’activités avant le lancement B
A -> B -> C -> D
État de la pile d’activités après le lancement B
A -> B -> C -> D -> B

singleTop : La différence avec la norme est que si une instance de l’activité existe déjà au sommet de la tâche actuelle et que le système achemine l’intention vers cette activité, aucune nouvelle instance ne sera créée car elle déclenchera une méthodeonNewIntent() au lieu de créer un nouvel objet.

Exemple:
Cas 1:
Supposons que vous avez des activités A, B, et C et que votre activité D a « mode de lancement = singleTop ». Maintenant, vous lancez l’activité D –
État de la pile d’activités avant le lancement D
A -> B -> C
État de la pile d’activités après le lancement de l’activité D
A -> B -> C -> D (Ici, D se lance comme d’habitude)
Cas 2:
Supposons que vous avez des activités A, B, C et D et que votre activité D a « mode de lancement = singleTop ». Maintenant, vous lancez à nouveau l’activité D –
État de la pile d’activités avant le lancement D
A -> B -> C -> D
État de la pile d’activités après le lancement D activité
A -> B -> C -> D (Ici, l’ancienne instance est appelée et les données d’intention sont acheminées par onNewIntent() callback)

singleTask : Une nouvelle tâche sera toujours créée et une nouvelle instance sera poussée vers la tâche en tant que racine. Cependant, si une instance d’activité existe dans n’importe quelle tâche, le système achemine l’intention vers cette instance d’activité par l’appel de la méthodeonNewIntent(). Dans ce mode, les instances d’activité peuvent être poussées vers la même tâche. Ce mode est utile pour les activités qui agissent comme les points d’entrée.

Exemple:
Cas 1:
Supposons que vous avez des activités A, B et C et que votre activité D a « launch mode = singleTask ». Maintenant, vous lancez l’activité D –
État de la pile d’activités avant le lancement D
A -> B -> C
État de la pile d’activités après le lancement de l’activité D
A -> B -> C -> D (Ici, D se lance comme d’habitude)
Cas 2:
Supposez que vous avez des activités A, B, C et D et votre activité B a « mode de lancement = singleTask ». Maintenant, vous lancez à nouveau l’activité B-
État de la pile d’activités avant le lancement D
A -> B -> C -> D
État de la pile d’activités après le lancement de l’activité B
A -> B (Ici, l’ancienne instance est appelée et les données d’intention sont acheminées par le callback onNewIntent())
Aussi, remarquez que les activités C et D sont détruites ici.

singleInstance : Même chose que,singleTask sauf que l’instance no activities peut être poussée dans la même tâche des singleInstance. Par conséquent, l’activité avec le mode de lancement est toujours dans une tâche d’instance d’activité unique. Ce mode est très spécialisé et ne devrait être utilisé que dans les applications qui sont mises en œuvre entièrement comme une seule activité.

Exemple:
Cas 1:
Supposons que vous avez des activités A, B et C et que votre activité D a « mode de lancement = singleInstance ». Maintenant, vous lancez l’activité D –
État de la pile d’activités avant le lancement D
A -> B -> C
État de la pile d’activités après le lancement D activité
Tâche1-A -> B -…> C
Tâche2-D (ici D sera dans une tâche différente)
Maintenant si vous continuez ceci et lancez E et D alors la pile ressemblera à-
Tâche1-A -> B -> C -> E
Tâche2-D
Cas 2 :
Supposons que vous avez des activités A, B, C dans une tâche et l’activité D est dans une autre tâche avec « launch mode = singleInstance ». Maintenant, vous lancez à nouveau l’activité D-
État de la pile d’activités avant le lancement D
Tâche1-A -> B -> C
Tâche2-D
État de la pile d’activités après le lancement B activité
Tâche1-A -> B -> C
Tâche2-D (Ici, l’ancienne instance est appelée et les données d’intention sont acheminées par le callback onNewIntent())

FLAG_ACTIVITY_NEW_TASK : Identique à la valeursingleTask dans le fichier Manifest (voir ci-dessus).

FLAG_ACTIVITY_SINGLE_TOP : Identique à la valeursingleTop dans le fichier Manifest (voir ci-dessus).

FLAG_ACTIVITY_CLEAR_TOP : Si l’activité en cours de démarrage est déjà en cours d’exécution dans la tâche actuelle, alors au lieu de lancer une nouvelle instance de cette activité, toutes les autres activités au dessus sont détruites et cette intention est livrée à l’instance reprise de l’activité (maintenant au dessus), cependant.onNewIntent() Il n’y a pas de valeur correspondante dans le fichier Manifest qui produit ce comportement. J’ai utilisé la référence pour cet article sont ici et ici.

Veuillez vous abonner à l’email pour obtenir toutes les newsletters de ce blog et si vous sentez que ce post vous aidera à mieux comprendre alors n’oubliez pas de vous abonner, partager et commenter ci-dessous. Ok, alors je vous verrai dans mon prochain tutoriel en attendant profitez de votre vie et joyeux codage 🙂

0 0 vote
Note de l’article

Je suis un développeur Android très enthousiaste pour construire des applications Android solides. J’ai un vif intérêt pour le développement pour Android et j’ai publié des applications sur le Google Play Store. Je suis toujours ouvert à l’apprentissage de nouvelles technologies. Pour toute aide, écrivez-nous à tout moment à [email protected]

.