38

Ich habe eine App, die sehr hierarchisch ist (Aktivitäten sind ähnlich wie Liga> Team> Position> Player) und so habe ich jede Aktivität singleTop gemacht Halten Sie die Navigation sinnvoll und verhindern Sie doppelte Instanzen.Einstellung launchMode = "singleTask" vs Einstellung Aktivität launchMode = "singleTop"

Jetzt mache ich meine zweite App und ich habe es vorgeschlagen, meine Anwendung zu singleTask zu deklarieren, doppelte Vorkommen zu verhindern. Kann jemand helfen, die Vorteile jedes Ansatzes zu erklären?

Meine neue App ist nur eine Aktivität mit 3 Fragmenten und dann werde ich wahrscheinlich eine Einstellungsaktivität und vielleicht eine FAQ hinzufügen.

EDIT: Ich habe gerade festgestellt, dass singleTask NICHT doppelte Instanzen meiner App verhindert, wie ich gedacht hatte. Jetzt auf der Suche nach dem richtigen Weg, um damit umzugehen ...

Antwort

53

Ich denke, Ihre Definition von singleTop und singleTask ist ein wenig aus. SingleTop könnte eine doppelte Instanz erzeugen. Lass uns dein Beispiel verwenden, Liga> Team> Position> Spieler. Wenn es eine Schaltfläche auf dem Spielerbildschirm gibt, die dich zum Ligascreen bringt, wird daraus Liga> Team> Position> Spieler> Liga.

Während singleTask garantiert, dass nur eine Instanz der Aktivität existieren kann.

+0

Ich vermutete, dass ich ihre Definitionen nicht vollständig verstanden habe. Danke für die Klarstellung. Mein Hauptziel war es, mit mir fertig zu werden, wenn ich in Liga> Team> Position gehe und dann die App, die Liga statt Position lud, minimiert und wiedereintritt. Indem ich SingleTop deklariere, lädt meine App jetzt immer dort, wo ich aufgehört habe. Nicht sicher, warum SingleTask das nicht macht. – NSouth

+0

@NSouth hast du jemals herausgefunden, warum Singletask es nicht tut? – batmaci

13

ich die Antwort hier: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

„singleTop“:

Der Unterschied von ‚Standard‘ ist, wenn eine Instanz von Aktivität existiert bereits an der Spitze der aktuellen Aufgabe und Systems routen, die auf diese Aktivität abzielen, wird keine neue Instanz erstellt, da sie eine onNewIntent() - Methode auslöst, anstatt ein neues Objekt zu erstellen. Nehmen wir als Beispiel die Twitter-oauth-Integration.

„singleTask“:

Eine neue Aufgabe wird immer erstellt werden und eine neue Instanz wird auf die Aufgabe als die Wurzel eines geschoben werden. Wenn jedoch in einer Aufgabe eine Aktivitätsinstanz vorhanden ist, leitet das System die Absicht über den onNewIntent() -Methodenaufruf an diese Aktivitätsinstanz weiter. In diesem Modus können Aktivitätsinstanzen an dieselbe Aufgabe gesendet werden. Wenn der Benutzer auf die Taste BACK aus der Aktivität singleTask klickt, gibt das System den Benutzer an die vorherige Aktivität zurück.

19

Android Aktivität launchMode

4 Modi ...

"Standard" "singleTop" "singleTask" "SingleInstance"

Der Standardmodus ist "Standard".

Die Modi sind in zwei Gruppen unterteilt. Standard und SingleTop kommt auf einer Seite und SingleTask und SingleInstance kommt auf einer anderen Seite.

Der Hauptunterschied zwischen Standard und SingleTop besteht im Standard, jedes Mal, wenn eine neue Absicht für Standardaktivitäten erstellt wird, wird eine neue Instanz erstellt. Auch im Falle von singleTop wird eine neue Instanz erstellt, aber eine Instanz der Aktivität befindet sich bereits oben im Stapel, sie erstellt keine neue Instanz.

Eigentlich kommt das Problem, wenn wir eine Anwendung von einem Server herunterladen und starten und von dort selbst öffnen. Drücken Sie nach dem Start der Anwendung die Home-Taste. Klicken Sie dann auf Alle Programme und wählen Sie das Symbol der Anwendung vom Startbildschirm aus. Dann wird eine andere Aktivität im Falle von Standard erstellt, aber in singleTop wird keine neue Instanz erstellt.

Die Modi "singleTask" und "singleInstance" unterscheiden sich auch nur in einer Hinsicht: Eine "singleTask" -Aktivität ermöglicht, dass andere Aktivitäten Teil ihrer Aufgabe sein können. Es ist die Wurzel des Aktivitätsstapels, aber andere Aktivitäten (notwendigerweise "Standard" - und "SingleTop" -Aktivitäten) können in derselben Task gestartet werden. Eine "singleInstance" -Aktivität hingegen erlaubt keine anderen Aktivitäten an ihrer Aufgabe teilzunehmen. Es ist die einzige Aktivität in der Aufgabe. Wenn es eine andere Aktivität startet, wird diese Aktivität einer anderen Aufgabe zugewiesen - als ob FLAG_ACTIVITY_NEW_TASK in der Absicht war.

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-android.html

5

Von Understanding Activity launch mode:

Standard (Standard): - Mehrere Instanzen der Aktivitätsklasse kann instanziiert und mehrere Instanzen können auf die gleiche Aufgabe oder verschiedene Aufgaben hinzugefügt werden. Dies ist der übliche Modus für die meisten Aktivitäten.

singleTop: - Der Unterschied von Standard ist, wenn eine Instanz der Aktivität bereits an der Spitze der aktuellen Aufgabe vorhanden ist, und das System leitet die Absicht dieser Aktivität wird keine neue Instanz erstellt werden , weil es feuern Sie eine onNewIntent() -Methode ab, anstatt ein neues Objekt zu erstellen.

singleTask: - Eine neue Aufgabe wird immer erstellt und eine neue Instanz wird an die Aufgabe als Root geschoben. Wenn jedoch eine Aktivitätsinstanz in beliebigen Aufgaben vorhanden ist, leitet das System die Absicht an die Aktivität Instanz über den Methodenaufruf onNewIntent() weiter. In diesem Modus kann die Aktivität Instanzen an die gleiche Task übergeben werden. Dieser Modus ist nützlich für Aktivitäten, die als Einstiegspunkte dienen.

singleInstance: - Wie singleTask, außer dass die keine Aktivitäten Instanz in die gleiche Aufgabe der singleInstances geschoben werden kann. Dementsprechend befindet sich die Aktivität mit Startmodus immer in einer einzelnen Aktivitätsinstanzaufgabe. Dies ist ein sehr spezieller Modus und sollte nur in Anwendungen verwendet werden, die vollständig als eine Aktivität implementiert sind.