Wofür genau wird das Attribut taskAffinity
verwendet? Ich habe die Dokumentation durchgesehen , konnte aber nicht viel verstehen.
Kann jemand die Aufgabenaffinität mit Laien erklären?
Wofür genau wird das Attribut taskAffinity
verwendet? Ich habe die Dokumentation durchgesehen , konnte aber nicht viel verstehen.
Kann jemand die Aufgabenaffinität mit Laien erklären?
Antworten:
Wofür wird Android Task Affinity verwendet?
Eine Android-Anwendung verfügt über Aktivitäten, die einen Stapel wie ein Kartenspiel bilden. Wenn Sie eine Android-Anwendung starten und fünf Aktivitäten A, B, C, D, E starten. Sie bilden einen Stapel
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
E war die letzte Aktivität, die gestartet wurde, und sie wird angezeigt. Wenn Sie E schließen, wird D angezeigt. Wenn Sie D schließen, wird C angezeigt. etc.
Beachten Sie, dass Aktivitäten B
und D
die gleiche Aktivität sind. Was wäre, wenn der Benutzer einige Änderungen an der vornehmen D weather screen
und dann entscheiden würde, die Aktivität zu schließen und dann die zu schließen C Map view
?
Dann wäre der Benutzer wieder auf dem Wetterbildschirm und der Benutzer wäre unglücklich, da die auf der Ebene vorgenommenen Änderungen D weather screen
nicht in der Ebene gespeichert wurden B weather screen
. Obwohl es sich um dieselbe Aktivität handelt, handelt es sich um einen anderen ZUSTAND dieser Aktivität.
Der Benutzer hatte einen 5-Ebenen-Stapel von Aktivitäten, von denen zwei dieselbe Aktivität waren. Wenn Sie alle 5 vom Stapel nehmen, entsteht das Phänomen, dass Sie mit zwei verschiedenen Versionen derselben Aktivität interagieren, was sehr verwirrend sein kann.
Benutzer denken normalerweise nicht in einem starren Stapel von Aktivitäten. Sie denken: "Oh, die Wetteransicht, ich werde dort eine Änderung vornehmen" und dann wollen sie zur Kartenansicht zurückkehren. Sichern Sie dann erneut, da Sie zum Anmeldebildschirm zurückkehren möchten. Warum wird B weather app
angezeigt und warum wurden die Einstellungen nicht vom Level D
gespeichert?
Der Programmierer kann möglicherweise Verwirrung stiften, wenn Aktivitäten B
und D
Status verknüpft sind. Auf diese Weise ändert sich zu einem das andere. Jedes Mal, wenn der Benutzer einen neuen Wetterbildschirm öffnet, öffnet er heimlich die einzelne Instanz des Wetterbildschirms.
Unter diesen Umständen kann es wünschenswert sein, die TaskAffinity der Aktivität zu ändern. Der Benutzer würde Stufe D ändern. Dann zurück zu Stufe B. Und die Änderungen in B sehen, die an D vorgenommen wurden.
Das Programm speichert einen Stapel, über den Sie sichern können, was sehr hilfreich ist. Wenn der Benutzer X Instanzen derselben Aktivität an zufälligen Stellen öffnet, sind sie alle eins.
Diashow mit weiteren Erklärungen: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
singleInstance
anstelle des verwenden taskAffinity
?
taskAffinity
:-( Die Erklärung ist vage. Erstaunlich, dass diese Antworten so viele positive Stimmen bekommen.
taskAffinity
wird verwendet, um den Namen der Aufgabe anzugeben, in der die Aktivität bevorzugt ausgeführt wird. Wenn eine Intent
das Flag enthält FLAG_ACTIVITY_NEW_TASK
, wird die Aktivität in diese bestimmte Aufgabe (definiert durch taskAffinity
) eingefügt .
Although it's the same activity, it's a different STATE of that activity.
Ich würde sagen: "Es ist ein weiteres Beispiel für diese Aktivität."
Die Affinität gibt an, zu welcher Aufgabe eine Aktivität bevorzugt gehört.
Die Affinität kommt unter zwei Umständen ins Spiel:
Wenn die Absicht, die eine Aktivität startet, das Flag FLAG_ACTIVITY_NEW_TASK enthält.
Wenn für eine Aktivität das Attribut allowTaskReparenting auf "true" gesetzt ist.
Weitere Informationen finden Sie unter http://developer.android.com/guide/components/tasks-and-back-stack.html
In dieser detaillierten Präsentation finden Sie alle Fälle (und manchmal auch Randfälle)
Weitere Informationen finden Sie unter Bearbeiten von Android-Aufgaben und Backstack