Angenommen, eine Anwendung hat bereits einen Stapel von Aktivitäten, und dann wird eine neue Aktivität aus dem Anwendungskontext mit FLAG_ACTIVITY_NEW_TASK gestartet. Und dies geschieht innerhalb desselben Prozesses, d. H. Innerhalb der Anwendung, wie folgt:
%Vor%Nach der Dokumentation haben wir jetzt 2 Aufgaben:
%Vor%Aus dem doc ergibt sich, dass es theoretisch möglich ist, dass der Benutzer unabhängig entweder zu Aktivität C oder zu Aktivität D wechselt, da sie zu verschiedenen Aufgaben gehören. In der Praxis konnte ich jedoch nicht auf Aktivität C wechseln - sie wechselte immer auf D.
Meine Frage ist: Stimmt es, dass Tasks, wenn sie im selben Prozess mit FLAG_ACTIVITY_NEW_TASK gestartet werden, nicht unabhängig sind und der Benutzer nur in der obersten Task zur obersten Aktivität wechseln kann?
Wenn die Antwort "nein" lautet, wie kann der Benutzer dann zu Task 1 wechseln?
Die Antwort lautet: Nein
Die Aufgaben sind unabhängig und der Benutzer kann unabhängig zwischen ihren Aktivitäten wechseln, sodass sich zwei Aktivitäten Ihrer App ganz oben auf dem Stapel befinden. Ich habe gerade den Anwendungsfall gefunden, drei Jahre nachdem ich die ursprüngliche Frage gestellt hatte.
Unsere App registriert sich selbst als Handler für ein URL-Schema (wie market://xxx.yyy/zzz
). Nun stellen wir uns vor, der Benutzer hat die App mit dem Launcher gestartet, ist mitten in etwas hineingeraten (Aktivitäten A, B, C
) und hat aufgehört. Dann klickt der Benutzer im Browser auf eine URL, sodass unsere andere Aktivität gestartet wird (Aktivität D
). Dies führt dazu, dass zwei Aufgaben gleichzeitig ausgeführt werden: Aktivitäten A, B, C
(mit C
oben) und Aktivität D
. Der Benutzer kann zwischen diesen beiden Aktivitäten über den Aufgabenverlauf wechseln.
Komisch, dass die Aktivität C in der Aufgabenhistorie mit dem eigenen Icon der App sichtbar ist, aber die Aktivität D ist mit dem Browsersymbol sichtbar. Unabhängig davon kann auf beide umgeschaltet werden.
Außerdem werden beide Aufgaben A-B-C
und D
im selben Prozess ausgeführt. Dies bedeutet, dass alle Singletone-Objekte und statische Daten zwischen ihnen geteilt werden. Daher können sie den Zustand des jeweils anderen beschädigen, wenn nicht Vorsicht walten gelassen wird.
Ich glaube nicht, dass es eine Möglichkeit gibt, Aufgaben (gegenüber Anwendungen), die dem Benutzer ausgesetzt sind, zu wechseln. Sie können zu der anderen Aufgabe im Code wechseln, indem Sie die entsprechende Aktivität starten.
Bearbeiten - Benachrichtigungen sind wahrscheinlich der beste Weg den Benutzer zwischen Aufgaben wechseln zu lassen, für die es keine Startprogramme gibt.
Ich habe ein Referenzprojekt erstellt, das genau diesen Anwendungsfall anspricht:
Tags und Links android android-activity stack task