2010-07-10 8 views
81

Ich habe eine App, die eine Liste als Hauptaktivität hat, und dann können Sie auf Elemente klicken, die eine detaillierte Ansicht dieses Elements öffnet. Ich habe auch eine Suchaktivität, die der Hauptaktivität ähnelt und wie vorgesehen funktioniert.Android singleTask oder singleInstance Startmodus?

Ich möchte jedoch, dass diese Suchaktivität nur einmal Instanz auf dem Stapel hat, so dass Benutzer mehrere Male suchen können, und klicken zurück, um sie zu der vorherigen Ansicht zurückzukehren, bevor sie mit der Suche begannen (anstatt zurück zu gehen) vorherige Suchergebnisse)

sowohl der SingleTask und singelInstance Launch-Modus scheint zu tun, was ich will, ich bin mir nicht sicher, welche ich für diesen Zweck verwenden sollte und warum?

Antwort

139

Von der Application Fundamentals Seite des Android-Entwickler Guide:

standardmäßig alle Aktivitäten in einer Anwendung haben eine Affinität für jede andere - das heißt, es gibt eine Präferenz für sie alle gehören zu derselben Aufgabe.

Eine Aktivität "singleInstance" steht allein als die einzige Aktivität in seiner Aufgabe. Wenn es eine andere Aktivität startet, wird diese Aktivität in eine andere Aufgabe unabhängig von seinem Startmodus gestartet - als ob FLAG_ACTIVITY_NEW_TASK in der Absicht war. Ansonsten ist der Modus "singleInstance" identisch mit "singleTask".

Wie oben erwähnt, gibt es nie mehr als eine Instanz eines „singleTask“ oder „SingleInstance“ Aktivität, so dass Beispiel wird erwartet, dass alle neuen Absichten zu behandeln. Eine "singleInstance" Aktivität ist immer an der Spitze des Stapels (da es die einzige Aktivität in der Aufgabe ist), so dass es immer in Position ist, die Absicht zu behandeln. Eine "singleTask" -Aktivität kann jedoch auch andere Aktivitäten darüber im -Stapel haben. Wenn dies der Fall ist, ist es nicht in Position, um die Absicht zu behandeln, und die Absicht wird verworfen. (Auch wenn die Absicht fallen gelassen wird, seine Ankunft wäre verursacht haben die Aufgabe, die Vordergrund zu kommen, wo er bleiben würde.)

4 Activities in a Task

Da es nie mehr als eins Instanz Die Aktivität mit dem Startmodus, die Zurück-Schaltfläche führt Sie immer zu der vorhandenen Instanz der Aktivität in Ihrem Fall.

Ein wichtiger Unterschied ist, dass "singleTask" nicht die Erstellung einer neuen Aufgabe für die neuen Aktivitäten erfordert, die gestartet werden, wenn etwas ausgewählt wird. Es muss auch nicht jedes Mal die neue Aufgabe auf der Zurück-Schaltfläche entfernen.

Da Ihr Aktivitätsstack alle zu einem Benutzer "Task" gehört, und es klingt nicht wie Sie haben eine komplizierte Intent-Struktur, wo SingleInstance nützlich sein kann, sie immer zu behandeln, würde ich vorschlagen, den SingleTask-Startmodus zu verwenden.

Hier ist eine gute Blog-Post für weitere Informationen, sowie für das Bild gutgeschrieben: Android Activities and Tasks series – An introduction to Android’s UI component model

+3

Danke! sieht aus wie eine gute lesen ... das ding ist iv realisiert ich eigentlich mehrere instanz einer aktivität und nur wenn die vordergrundaktivität ist eine suchaktivität und eine andere suche durchgeführt wird, sollte es diese bestehende aktivität (wie der markt funktioniert) Und dafür ist der SingeTop genau das was ich nachher aber danke für die Hilfe trotzdem =) danke – Kman

+1

Hey, danke. Dieser gut geschriebene Beitrag hat mir im Notfall geholfen. – icecreamman

+0

Danke für die Details, besonders diese * (Auch wenn die Absicht fallengelassen wurde, hätte ihre Ankunft die Aufgabe in den Vordergrund treten lassen, wo sie bleiben würde.) *, Was sofort meine Verwirrung löscht. Ich habe gerade darüber nachgedacht, was passiert, wenn eine SingleTask Activity nicht an der Spitze des Stacks steht, während ich trotzdem dorthin navigieren möchte, ohne 'FLAG_ACTIVITY_CLEAR_TOP' anzugeben. – neevek

4

singleTask und singleInstance Aktivitäten nur eine Aufgabe beginnen können. 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.
für mehr android:launchMode.

+0

der letzte Satz ist wahr für singleInstance, nicht singleTask –

+0

@SerdarS. schätzen Sie Ihren Kommentar. Hinzufügen von mehr zu 'singleTask' - Das System erstellt eine neue Aufgabe und instanziiert die Aktivität im Stamm der neuen Aufgabe. Wenn jedoch eine Instanz der Aktivität bereits in einer separaten Aufgabe vorhanden ist, leitet das System die Absicht an die vorhandene Instanz durch einen Aufruf seiner 'onNewIntent()' -Methode weiter, anstatt eine neue Instanz zu erstellen. Es kann immer nur eine Instanz der Aktivität vorhanden sein. für mehr [developer.android.com] (https://developer.android.com/guide/components/activities/tasks-and-back-stack.html) –

+0

Verstanden, dann lag ich falsch. Entschuldige die Störung. –

27

In einem einfachen Weg-

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 an die vorhandene Instanz durch einen Aufruf an die Methode onNewIntent() weiter, anstatt eine neue Instanz zu erstellen. Nur one instance der Aktivität kann gleichzeitig existieren.

Hinweis: Obwohl die Aktivität in einer neuen Aufgabe startet, gibt die Zurück-Schaltfläche den Benutzer immer noch zur vorherigen Aktivität zurück.

singleInstance-

Gleiche wie "singleTask", mit der Ausnahme, dass das System keine anderen Aktivitäten in die Aufgabe nicht starten die Instanz halten. Die Aktivität ist immer das einzige und einzige Mitglied ihrer Aufgabe; Alle Aktivitäten, die von diesem gestartet werden, werden in einer separaten Task geöffnet.

Verwandte Themen