Android: Hat FLAG_ACTIVITY_NEW_TASK im selben Prozess Wirkung?

8

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?

AKTUALISIEREN

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.

    
JBM 08.03.2011, 17:38
quelle

3 Antworten

7

Es ist eine Weile her, dass ich diese Frage gestellt habe, als ich auf diesen Link stieß, den ich sehr nützlich finde. Es beschreibt alle Flaggen und Kombinationen sehr deutlich.

Ссылка

    
JBM 31.05.2011, 16:47
quelle
0

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.

    
Matthew Willis 08.03.2011 17:43
quelle
0

Ich habe ein Referenzprojekt erstellt, das genau diesen Anwendungsfall anspricht:

Ссылка

    
theelfismike 29.07.2013 23:35
quelle