Ich habe eine Browser-Anwendung mit Hauptaktivität erstellt, die auf folgende Absichten reagiert:
%Vor%Bei URL-Klick von einer anderen Aufgabe (Gmail, SMS) Wenn ich meine Anwendung wähle, ist die Aktivität in derselben Task wie die aufrufende Aufgabe geöffnet. Wenn ich einen anderen Browser auswähle (Mozilla Firefox, Chrome, Delphine) öffnen sie sich in verschiedenen Aufgaben.
Wenn ich auf andere Browser-Manifeste schaue, sehe ich, dass niemand android: launchMode="singleTask" .
verwendetIch möchte nicht Single-Task-Flag verwenden, da es nicht von Google empfohlen wird und macht mir auch andere Proleme.
Ich habe versucht zu verstehen, wie andere Browser es tun, aber es nicht herausgefunden haben.
irgendwelche Ideen? Gibt es eine andere Möglichkeit, meine Aktivität in verschiedenen Aufgaben zu öffnen, ohne SingleTask Flag zu verwenden?
Sie versuchen, die Regeln ein wenig zu ändern, und Sie sind nicht klar genug, was Sie vermeiden möchten, indem Sie android:launchMode="singleTask"
nicht verwenden.
Also würde ich vorschlagen, entweder zu erforschen:
Erzeuge ein Service
und lasse dieses Service
auf den Intent-Filter hören. Wenn Sie Service
haben, dann öffnen Sie Ihre Activity
und stellen Sie sicher, dass die Activity
-Affinität korrekt auf die Service
abgestimmt ist. Auf diese Weise können Sie das Problem beheben, bei dem die Affinität Activity
nicht korrekt bindet.
Mit einer stillen Activity
beginnt eine neue Activity
und wird beendet. Die stille Activity
würde in einem neuen Stapel (nicht in einem Singletask-Modus) starten und würde sich beim Start von Activity
, das Sie tatsächlich benötigen, selbst schließen.
Ich habe die folgende Beschreibung auf der Android-Seite gefunden:
Als ein weiteres Beispiel erklärt die Android Browser-Anwendung, dass der Web-Browser-Aktivität sollte immer in einer eigenen Aufgabe öffnen - durch Angabe der SingleTask-Startmodus im Element. Das bedeutet, dass Wenn Ihre Anwendung eine Absicht zum Öffnen des Android Browsers ausgibt, wird Aktivität ist nicht in derselben Task wie Ihre Anwendung platziert. Stattdessen, entweder startet eine neue Aufgabe für den Browser oder, wenn der Browser bereits existiert Im Hintergrund läuft eine Aufgabe, an die die Aufgabe weitergeleitet wird Behandle die neue Absicht.
Wie Sie sehen können, ist android:launchMode=singleTask
in Ihrem Fall die richtige Wahl. Sie haben bereits erwähnt, dass Sie Probleme mit dieser Eigenschaft hatten, also konzentrieren wir uns vielleicht auf sie.
Update 28.05.2014
Hinweis von Google bezüglich singleTask launchMode:
Die anderen Modi - singleTask und singleInstance - sind nicht geeignet für die meisten Anwendungen, da sie zu einem Interaktionsmodell führen, das ist den Nutzern wahrscheinlich nicht vertraut und unterscheidet sich sehr von den meisten andere Anwendungen.
singleTask und singleInstance Anwendungsfall von Google:
Spezialisierte Starts (nicht für den allgemeinen Gebrauch empfohlen)
Wie Sie sehen können, ist singleTask möglicherweise nicht für den allgemeinen Gebrauch zu empfehlen, aber Ihr Fall ist nicht allgemein, tatsächlich ist es einer der Fälle, in denen singleTask perfekt passt. Mit anderen Worten, singleTask ist nicht verboten, es muss nur mit Vorsicht verwendet werden, um den Endbenutzern eine allgemeine Erfahrung mit Ihrer App zu bieten.
Ich hoffe, ich habe es jetzt für Sie klar gemacht. Fühlen Sie sich in diesem Fall mit diesem Startmodus wohl.
Tags und Links android android-intent