Sur android launchmode “singleTask”
J'ai lu l'android developer guide et de certains de ses articles sur internet, je suis toujours confus au sujet de l' singleTask
launchmode
. Prenons un exemple:
De l'utilisateur de lancer le App1, android commence une nouvelle tâche. Assumer la App1 crée des activités dans le suivi de commande:
ActivityA -> ActivityB -> ActivityC
C'est comment task1 ressemble.
Utilisateur puis cliquez sur le fond et choisir de lancer App2, donc task1 va en arrière-plan et android démarrer une nouvelle tâche: task2, l'utilisateur fait quelque chose:
ActivityD -> ActivityE
maintenant permet de dire ActivityE
essayez de démarrer ActivityB
, et ActivityB
a la launchmode singleTask
.
Ce que je comprends, c'est que task1 vient à nouveau frontend et task2 va à fond. Et task1 regarde maintenant comme ceci:
ActivityA -> ActivityB
Qui signifie:
-
La
ActivityC
sera retiré de task1 et ActivityB devient le sommet de l'Activité. -
Si l'utilisateur clique maintenant sur le bouton "Retour", il viendra
ActivityA
task1 au lieu de retourner àActivityE
de task2
Suis-je droit?
Grâce
ActivityB
est singleTask, il est donc toujours à la racine de sa tâche. Donc, siActivityA
est la racine de l'activité, une nouvelle tâche est créée pourActivityB
. Je n'en suis pas sûr, je suis inexpérimenté.
Vous devez vous connecter pour publier un commentaire.
Oui, vous avez raison...
ActivityC sera retiré de savoir la méthode onDestroy de la ActivityC sera appelée. C'est pourquoi, lorsque l'utilisateur lance la Tâche 1 de nouveau, le ActivityB est montré plutôt que ActivityC.
Ont créé 2 Tâches (Projets) et déposé le même @ SendSpace. L'essayer...
Si vous regardez les androïdes la documentation il dit
" Un "singleTask" activité permet à d'autres activités pour faire partie de sa tâche. Il est toujours à la racine de sa tâche, mais d'autres activités (nécessairement "standard" et "singleTop" activités) peuvent être lancées dans cette tâche."
Qui signifie que lorsque vous cliquez sur le bouton d'accueil de toutes les activites ci-dessus, la seule tâche de l'activité (ce qui dans votre cas est ActivityB) sont retirées de la pile.
Dans l'exemple d'application que je vous avais donné plus haut, si vous venez d'exécuter le projet "AndroidTest" et cliquez sur le bouton accueil dans les journaux, vous pouvez voir que la 2ème Activité est de mettre sur Pause, et lorsque vous le lancez à nouveau à partir de la "Récente de l'Application" liste de la 2ème Activité est Détruite.
Dans un senario où l'Activité est au-dessus de la Seule Instance activités (ActivityB) ne sont pas supprimés à partir de la Pile de Retour, et une autre demande de cette Activité (ActivityB), il ne peut pas être affiché et que l'intention peut être supprimée. Mais cela a extreamly moins de chances de se produire, car l'utilisateur doit appuyer sur le bouton Home et le mais la Tâche en cours\Application dans la BackStack avant qu'il ne puisse naviguer vers une autre Tâche\App.
D'où l'avertissement
Les autres modes — singleTask et à instance unique, ne sont pas appropriés pour la plupart des applications, car elles aboutissent à un modèle d'interaction qui est susceptible d'être inconnu pour les utilisateurs et est très différent de la plupart des autres applications.
J'espère que cela résout vos doutes.
Vous son droit.
Pourquoi ne pas le tester.
Il y a aussi cette application qui peut aider à expliquer le mode de lancement:
https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode
Sources sont à https://github.com/gnorsilva/Activities-LaunchMode-demo