Auf der Seite " Anwendungsgrundlagen " des Android-Entwicklerhandbuchs:
Standardmäßig haben alle Aktivitäten in einer Anwendung eine Affinität zueinander - das heißt, es wird bevorzugt, dass sie alle zur selben Aufgabe gehören.
Eine "singleInstance" -Aktivität ist die einzige Aktivität in ihrer Aufgabe. Wenn eine andere Aktivität gestartet wird, wird diese Aktivität unabhängig von ihrem Startmodus in eine andere Aufgabe gestartet - als ob FLAG_ACTIVITY_NEW_TASK beabsichtigt wäre. Im Übrigen ist der Modus "singleInstance" identisch mit "singleTask".
Wie oben erwähnt, gibt es nie mehr als eine Instanz einer "singleTask" - oder "singleInstance" -Aktivität, sodass von dieser Instanz erwartet wird, dass sie alle neuen Absichten verarbeitet. Eine "singleInstance" -Aktivität befindet sich immer oben im Stapel (da dies die einzige Aktivität in der Aufgabe ist), sodass sie immer in der Lage ist, die Absicht zu verarbeiten. Eine "singleTask" -Aktivität kann jedoch andere Aktivitäten darüber im Stapel haben oder nicht. Wenn dies der Fall ist, ist es nicht in der Lage, die Absicht zu verarbeiten, und die Absicht wird gelöscht. (Obwohl die Absicht fallengelassen wurde, hätte ihre Ankunft dazu geführt, dass die Aufgabe in den Vordergrund getreten wäre, wo sie verbleiben würde.)
Da es in beiden Startmodi nie mehr als eine Instanz der Aktivität gibt, gelangen Sie mit der Schaltfläche "Zurück" immer zur vorhandenen Instanz der Aktivität in Ihrem Fall.
Ein wichtiger Unterschied besteht darin, dass für "singleTask" keine neue Aufgabe für die neuen Aktivitäten erstellt werden muss, die gestartet werden, wenn etwas ausgewählt wird. Sie muss diese neue Aufgabe auch nicht jedes Mal auf der Zurück-Schaltfläche entfernen.
Da sich Ihr Aktivitätsstapel alle auf eine Benutzeraufgabe bezieht und es nicht so klingt, als hätten Sie eine komplizierte Intent-Struktur, in der singleInstance von Vorteil sein kann, um sie immer zu handhaben, würde ich die Verwendung des SingleTask-Startmodus empfehlen.
Hier ist ein guter Blog-Beitrag für weitere Informationen sowie eine Gutschrift für das Bild: Android-Aktivitäten und -Aufgaben - Eine Einführung in das UI-Komponentenmodell von Android
FLAG_ACTIVITY_CLEAR_TOP
.Auf einfache Weise
singleTask:
Das System erstellt eine neue Aufgabe und instanziiert die Aktivität an der Wurzel der neuen Aufgabe. Wenn jedoch eine Instanz der Aktivität bereits in einer separaten Aufgabe vorhanden ist, leitet das System die Absicht durch einen Aufruf seiner
onNewIntent()
Methode an die vorhandene Instanz weiter , anstatt eine neue Instanz zu erstellen. Es kann immer nurone instance
die Aktivität vorhanden sein.singleInstance-
Gleich wie
"singleTask"
, außer dass das System keine anderen Aktivitäten in die Task startet, die die Instanz enthält . Die Aktivität ist immer das einzige und einzige Mitglied ihrer Aufgabe; Alle von dieser gestarteten Aktivitäten werden in einer separaten Aufgabe geöffnet .quelle
singleTask
undsingleInstance
Aktivitäten können nur eine Aufgabe beginnen. Sie befinden sich immer an der Wurzel des Aktivitätsstapels. Darüber hinaus kann das Gerät jeweils nur eine Instanz der Aktivität enthalten - nur eine solche Aufgabe.für mehr android: launchMode .
quelle
singleTask
- Das System erstellt eine neue Aufgabe und instanziiert die Aktivität im Stammverzeichnis der neuen Aufgabe. Wenn jedoch eine Instanz der Aktivität bereits in einer separaten Aufgabe vorhanden ist, leitet das System die Absicht durch einen Aufruf seineronNewIntent()
Methode an die vorhandene Instanz weiter , anstatt eine neue Instanz zu erstellen. Es kann jeweils nur eine Instanz der Aktivität vorhanden sein. für mehr developer.android.com