2013-06-27 5 views
10

Ich ging die Dokumentation für einzelne Instanz durch und probierte einige Proben aus. In einem meiner Beispiel habe ich drei Aktivitäten: A-> B-> C, wo B hat android: launchMode = "singleInstance" in manifest. Aktivität A und C hat Standardstartmodus.Android: Startmodus 'Einzelinstanz'

Szenario:

Nach dem C über A und B die Navigation (dh A-> B-> C), Zurück-Taste von C Aktivität nimmt zu Aktivität A (C> A), aber wieder Das Drücken der Taste von Activity A beendet die App nicht, sondern bringt die Activity B in den Vordergrund. Drücken Sie dann die Zurück-Taste von Activity B, um die App zu beenden.

Frage

Warum Aktivität B in den Vordergrund kommt, wenn Zurück-Taste von Aktivität A gedrückt wird?

Anderes Szenario:

Similarliy, von Aktivität C, wenn der Benutzer drückt Gerät Home-Taste, und kommt die App durch lange zu Hause Presse zurück, bleibt C im Vordergrund. Aber zurück Knopfdruck Flow dauert C-> A -> beendet die App. Dieses Mal kommt Aktivität B nicht in den Vordergrund.

Antwort

20

Nach dem Navigation A-> B Sie haben zwei Aufgaben: Die erste enthält A, die zweite enthält B . B ist oben und A ist darunter.

Wenn nun von B- Navigation> C Android startet Aktivität C in die Aufgabe enthält, A (es nicht in die Aufgabe enthält, B starten kann, weil B als „SingleInstance“ definiert ist, so leitet sie diese in eine Aufgabe, die hat die gleiche "TaskAffinity", in diesem Fall die Aufgabe, die A enthält). Um dies zu erreichen, bringt Android die Aufgabe mit A nach vorne. Jetzt haben Sie 2 Aufgaben: Die Aufgabe mit A und C vorne und die zweite mit B darunter.

Jetzt drücken Sie die BACK-Taste, die die Aktivität C beendet und zu der Aktivität unterhalb der Task C zurückkehrt. Sie haben noch 2 Aufgaben: Die eine enthält C vorne und die andere B darunter .

Jetzt drücken Sie erneut die BACK-Taste. Dies beendet die Aktivität A (und beendet damit die Aufgabe, die A enthielt) und bringt die vorherige Aufgabe im Aufgabenstapel an die Front, nämlich die Aufgabe, die B enthält.Sie haben nun 1 Aufgabe: die Aufgabe, B. enthält

In Ihrem anderen Szenario, nachdem sie von A-> B-> C Navigation, beginnen Sie mit zwei Aufgaben: Die Aufgabe enthält, A und C in der Front und die zweite enthält B darunter.

Jetzt drücken Sie die HOME-Taste. Sie sagen jetzt, dass Sie "durch langen Druck auf die App zurückkommen". Das ist nicht genau richtig. Sie können nicht "zurück zur App". Sie können nur zu einer Aufgabe zurückkehren. Aber du hast 2 verschiedene Aufgaben: Wenn du lange drückst, solltest du die 2 Aufgaben sehen. Sie haben wahrscheinlich das gleiche Symbol (es sei denn, Sie haben ein anderes Symbol für Aktivität B angegeben), so dass Sie sie möglicherweise nicht unterscheiden können. Wenn Sie die Aufgabe auswählen, die A und C enthält, wird diese Aufgabe an die Front mit der Aktivität C oben gebracht. Wenn Sie jetzt die Taste ZURÜCK drücken, wird die Aktivität C beendet und die Aktivität darunter, Aktivität A, wird angezeigt. Wenn Sie nun erneut die BACK-Taste drücken, wird die Aktivität A beendet und Sie kehren zum HOME-Bildschirm zurück. Die Aufgabe, die B enthält, befindet sich immer noch in der Liste der letzten Aufgaben, aber sie befindet sich nicht mehr im Aufgabenstapel unter Ihrer anderen Aufgabe, denn wenn Sie die HOME-Taste drücken, ist es wie bei Null. Du fängst wieder von vorne an. Sie haben keine aktiven Aufgaben, also sind alle Aufgaben in einer Reihe, sie sind nicht in einem Stapel und es gibt keine Hierarchie.

Auch in Ihrer Frage verwenden Sie den Ausdruck "beendet die App". Das ist auch nicht ganz korrekt. Das Drücken der BACK-Taste bewirkt lediglich, dass die aktuelle Aktivität beendet wird. Wenn die aktuelle Aktivität die einzige Aktivität in einer Aufgabe ist, wird diese Aufgabe ebenfalls beendet. Es "beendet" die App jedoch nicht. Besonders in Ihrem Fall, da Ihre "App" tatsächlich in 2 separaten Aufgaben existiert.

Hoffentlich ist dies klar.

+1

Vielen Dank David..Ihre Antwort erklärt das Konzept sehr deutlich, sehr hilfreich :) Nur um weitere Details hinzuzufügen, hatte ich alle diese drei Aktivitäten A, B und C innerhalb derselben Anwendung. Auf lange Heimarbeit konnte ich zwei getrennte Aufgaben nicht sehen, aber nur eine. Auch in Bezug auf das ANDERE SZENARIO, "Wenn Sie jetzt erneut die BACK-Taste drücken, wird die Aktivität A beendet und Sie kehren zum HOME-Bildschirm zurück." ** F: ** Warum braucht es uns nicht? Aufgabe, die B enthält, weil die Aufgabe, die B enthält, unterhalb der Aufgabe sein sollte, die A und C enthält, richtig? Bitte korrigieren Sie mich, wenn ich falsch liege. – Pravy

+0

Bitte poste dein Manifest, dann kann ich dir weiterhelfen. Füge es einfach zu deiner Frage als Bearbeitung hinzu. –

+0

Hey Pravy, hat deine Verwirrung endlich gelöst? Warum braucht es keine Aufgabe mit B? Ich habe die gleiche Verwirrung. Wenn du es weißt, bitte sag es mir. Vielen Dank. – CodeAlien

1

Aus den doc

  1. "SingleInstance" Aktivitäten können nur eine Aufgabe beginnen. Sie sind immer die Wurzel des Aktivitätsstapels. Darüber hinaus kann das Gerät nur eine Instanz der Aktivität gleichzeitig speichern - nur eine solche Aufgabe.

  2. Eine "singleInstance" -Aktivität erlaubt dagegen keine anderen Aktivitäten. Es ist die einzige Aktivität in der Aufgabe. Wenn es eine andere Tätigkeit beginnt, wird diese Aktivität zu einer anderen Aufgabe zugewiesen

+0

: Danke für die Antwort, Ihr erster Punkt macht klar, warum es wieder in den Vordergrund kommt. Ich brauche noch eine Klarstellung darüber, wie der Aktivitätenstack, verschiedene Aufgaben und einzelne Aktivitäten zusammenhängen. AS meines Verständnisses aus Ihrer Antwort, die OS verwaltet einen Stapel namens 'Aktivität Stack', die Stapel von Aufgaben, enthält, die Inturn (dh einzelne Aufgaben) enthält Aktivitäten.Wenn jede Aktivität als einzelne Instanz erstellt wird, dann es wird als separate Aufgabe erstellt und diese Aufgabe wird am unteren Ende des Stapels platziert. Bitte lassen Sie mich wissen, wenn mein Verständnis stimmt. – Pravy

+0

@Pravy .. Ihr Verständnis passt zu mir :) .. .. wenn eine Aktivität normal startet (nicht singleinstance oder singletask) dann wird es nur auf den Stapel geschoben – stinepike

+0

Nun danke .. aber das gleiche verhält sich anders, wenn Benutzer Gerät gedrückt hatte Home-Button von Aktivität C. Ich habe es in dem anderen Szenario aktualisiert. Darf ich wissen, was der Grund sein könnte? – Pravy

Verwandte Themen