2017-10-14 4 views
0

Meine Tätigkeit hat in Manifest-Datei:Ist Intent.FLAG_ACTIVITY_NEW_TASK redundant, wenn bereits in Manifest festgelegt?

android:launchMode="singleTask" 

Nun, wenn ich diese Tätigkeit von meinem Code und die Verwendung starten:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Ist dies überflüssig?

Was stoßen diese Flagge:

Intent.FLAG_ACTIVITY_SINGLE_TOP 

Ist dies überflüssig?

Vielen Dank!

+0

Was meinst du mit überflüssig sagen? Müssen Sie wissen, ob "singleTask" überschrieben wird oder nicht? – azizbekian

+0

Mit redundant meine ich das ist nicht notwendig, weil es bereits in Manifest definiert ist und es nichts ändert. Wie wenn Sie eine Variable zweimal hintereinander auf denselben Wert setzen. Das zweite Mal ist redundant. – Chris

Antwort

0

1.about singleTask

Von der Application Fundamentals Seite des Android-Entwickler Guide:

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

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.)

Da es nie mehr als eine Instanz der Aktivität ist entweder mit Start Modus, 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.

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

2.about singleTop

Wenn eine Instanz eines Stiefels in singleTop Modus Aktivität existiert bereits in Der Task-Stack-Stapel oben, starten Sie dann die Aktivität neu, wenn keine neue Instanz erstellt wird. In diesem Fall wird die oberste Ebene des Stacks erneut verwendet und die Instanz der onNewIntent()-Methode aufgerufen, um ein Intent-Objekt an diese Instanz zu übergeben. Zum Beispiel, wenn der Startmodus von A singleTop, ein Beispiel und A bereits in der Spitze des Stapels existiert, dann rufen Sie die startActivity (New Intent (this, A.class)), wenn A startet, A Instanzen werden nicht erneut erstellt, aber die ursprünglichen Beispiele wiederverwenden und das Original aufrufen Instanz von onNewIntent (method). Dies ist ein Beispiel für diesen Task-Stack oder eine A. Wenn ein Start in singleTop Modus Aktivität bereits vorhanden ist und der Task-Stack, aber nicht im Stapel oben, dann sein Verhalten und Standard das gleiche Muster, erstellt auch mehrere Instanzen. Sie können sehen understand-android-activity-launchmode

EDIT

Es ist nicht redundant ist.

Um den Benutzer aufzuzeichnen, um diese Aktivität zu öffnen, zeichnen Sie die Reihenfolge dieser geöffneten Aktivitäten auf, Google führt das Aufgabenstapelkonzept ein, um eine gute Benutzererfahrung beizubehalten.

Der Startmodus der Aktivität kann den Aufgabenstapel beeinflussen. Und das Intent Flag kann auch den Aufgabenstapel beeinflussen.

Sie können das Task-Stack-Muster im Code ändern, ohne es in der Manifestdatei zu ändern. Die Flags können sich direkt auf den Task-Stack auswirken.

Genau wie android:text="content" in XML-Code. Und tv.setText("content"); ist im Java-Code.

+1

Ich denke nicht, dass Sie meine Frage beantworten. Es wird bereits in der Dokumentation erklärt, was singleTop, singleInstance ... tut. Kannst du meine Frage beantworten und nicht über singleInstance sprechen? – Chris

Verwandte Themen