À 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?
android
android-manifest
taskaffinity
Traxex1909
la source
la source
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 é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
etD
sont la même activité. Et si l'utilisateur apportait des modifications auD weather screen
, puis décidait de fermer l'activité, puis de fermer leC 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 niveauB 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 niveauD
?Le programmeur pourrait être en mesure d'atténuer une certaine confusion si les activités
B
etD
é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
la source
singleInstance
au lieu d'utiliser letaskAffinity
?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 anIntent
contient l'indicateurFLAG_ACTIVITY_NEW_TASK
, l'activité est alors placée dans cette tâche particulière (définie partaskAffinity
).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
la source
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
la source