Explication de l'affinité des tâches Android


104

À 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?


1
Voici une très bonne explication avec des exemples: slideshare.net/RanNachmany/…
user1269737

Je pense que cette réponse est la meilleure: stackoverflow.com/a/21383301/1318946
Pratik Butani

Réponses:


161

À 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 Bet Dsont 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 screenn'é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 appspectacle 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 Bet 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


13
Et si utiliser le singleInstanceau lieu d'utiliser le taskAffinity?
hguser

5
Dans le cas décrit ci-dessus, je préférerais utiliser Intent.FLAG_ACTIVITY_REORDER_TO_FRONT comme indicateur dans l'activité d'appel d'intention D, cela amènerait l'activité B au-dessus de toutes les autres et n'en conserverait qu'une seule instance
EyalBellisha

64
En fait, cette réponse touche à peine taskAffinitydu tout :-( L'explication est vague. Étonnant que ces réponses obtiennent autant de votes positifs.
David Wasser

6
Réponse si longue mais ne mentionne toujours pas le simple fait: taskAffinityest utilisé pour spécifier le nom de la tâche dans laquelle l'activité préfère s'exécuter. Quand an Intentcontient l'indicateur FLAG_ACTIVITY_NEW_TASK, l'activité est alors placée dans cette tâche particulière (définie par taskAffinity).
Stan Mots du

3
Although it's the same activity, it's a different STATE of that activity.Je dirais: «C'est un autre exemple de cette activité».
Maksim Dmitriev

6

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


26
Merci d'avoir copié de developer.android.com
Anirban

Cela n'explique rien. Qu'est-ce que cela signifie en pratique?
James Andrews le

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.