À quoi sert exactement l'attribut taskAffinity
? J'ai parcouru la documentation mais je ne comprenais pas grand-chose.
Quelqu'un peut-il expliquer l'affinité des tâches en termes simples?
À quoi sert exactement l'attribut taskAffinity
? J'ai parcouru la documentation mais je ne comprenais pas grand-chose.
Quelqu'un peut-il expliquer l'affinité des tâches en termes simples?
Réponses:
À quoi sert Android Task Affinity?
Une application Android a des activités qui forment une pile comme un jeu de cartes. Si vous démarrez une application Android et démarrez cinq activités A, B, C, D, E. Ils formeront une pile
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
E était la dernière activité à être démarrée et elle s'affiche. Si vous fermez E, D sera affiché. Si vous fermez D, C sera affiché. etc.
Notez que les activités B
et D
sont la même activité. Et si l'utilisateur apportait des modifications au D weather screen
, puis décidait de fermer l'activité, puis de fermer le C Map view
?
Ensuite, l'utilisateur reviendrait à l'écran météo et l'utilisateur serait mécontent car les modifications apportées au niveau D weather screen
n'étaient pas enregistrées dans le niveau B weather screen
. Bien que ce soit la même activité, c'est un ÉTAT différent de cette activité.
L'utilisateur disposait d'une pile d'activités à 5 couches, dont deux étaient la même activité. Éjecter les 5 de la pile créera le phénomène où vous interagirez avec deux versions différentes de la même activité et peut être assez déroutant.
Les utilisateurs ne pensent généralement pas en termes de pile rigide d'activités. Ils pensent: "ooh la vue météo, je vais faire un changement là-bas" et ensuite ils veulent revenir à la vue Carte. Revenez ensuite en arrière, car ils souhaitent revenir à l'écran de connexion. Pourquoi le B weather app
spectacle et pourquoi n'a-t-il pas enregistré les paramètres du niveau D
?
Le programmeur pourrait être en mesure d'atténuer une certaine confusion si les activités B
et D
étaient liées dans l'état. De cette façon, les modifications apportées à l'une modifient l'autre. Chaque fois que l'utilisateur ouvre un nouvel écran météo, il ouvre secrètement l'instance unique de l'écran météo.
Dans ces circonstances, il peut être souhaitable de modifier la taskAffinity de l'activité. L'utilisateur changerait de niveau D. Puis revenait au niveau B. Et voyait les modifications de B qui ont été apportées à D.
Le programme conserve une pile que vous pouvez sauvegarder, ce qui est bien, et lorsque l'utilisateur ouvre X instances de la même activité à des endroits aléatoires, elles ne font qu'une.
Diaporama avec plus d'explications: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
singleInstance
au lieu d'utiliser le taskAffinity
?
taskAffinity
du tout :-( L'explication est vague. Étonnant que ces réponses obtiennent autant de votes positifs.
taskAffinity
est utilisé pour spécifier le nom de la tâche dans laquelle l'activité préfère s'exécuter. Quand an Intent
contient l'indicateur FLAG_ACTIVITY_NEW_TASK
, l'activité est alors placée dans cette tâche particulière (définie par taskAffinity
).
Although it's the same activity, it's a different STATE of that activity.
Je dirais: «C'est un autre exemple de cette activité».
L'affinité indique à quelle tâche une activité préfère appartenir.
L'affinité entre en jeu dans deux circonstances:
Lorsque l'intention qui lance une activité contient l'indicateur FLAG_ACTIVITY_NEW_TASK.
Lorsqu'une activité a son attribut allowTaskReparenting défini sur "true".
Veuillez vous référer à http://developer.android.com/guide/components/tasks-and-back-stack.html
Vous pouvez retrouver tous les cas (et parfois les cas extrêmes) dans cette présentation détaillée
Veuillez vous référer à Manipuler les tâches Android et la pile arrière