2017-02-28 1 views
15

Dieses Bild ist für das Verständnis der Funktionalität durch die launhmode singleTask, genommen von hereSingleTask Aktivität, sondern eröffnet durch zwei verschiedene Anwendungen

enter image description here jedoch angeboten sehr hilfreich war, verstand ich dies bei der gleichen Anwendung, ich habe Probleme zu verstehen, was, wenn beide Aufgaben zu zwei verschiedenen Anwendungen gehören

Verwirrende Szenario (fiktive),

  • Ich ging durch eine App und die App bot eine Aktion zum Senden von E-Mails, wählte ich 'E-Mail senden' Option.
  • Die Standardvorgabe meines Telefons 'E-Mail-App' wird ausgewählt und seine Aktivität (die als Singletask deklariert ist) wird geöffnet.
  • Während ich meinen E-Mail-Inhalt eingeben, wechselte ich zu einem gewissen Chat-App und die App abgestürzt werden und bot mir eine Option ein Problem über E-Mail an den Entwickler zu melden, Wenn ich jetzt wählen werde ‚Bericht‘ , meine E-Mail App (die die gleiche Standard-E-Mail-App ist) wird geöffnet.

  • Jetzt, da die Stammaktivität der E-Mail-App Singletask ist, wird mein Inhalt , den ich geschrieben habe, für mich sichtbar sein?

Die Hauptsache ist dieses Mal, die Aufgaben/Stapel gehören zwei verschiedene Anwendungen.

+0

Ich bezweifle es, Ihr Inhalt sollte als Entwurf gespeichert werden und eine neue Mail-Aktivität sollte mit der Adresse des Empfängers darin geladen werden Obwohl ich das "sollte" in oben genannten Satz muss in "Will" geändert werden – Neji

+0

@Neji The derselbe 'Zweifel' hat mich dazu gebracht, diese Frage hier zu stellen: D. – nobalG

+1

Ihre singleTask-Aktivität erhält einen Rückruf onNewIntent(), wenn sie nicht gestartet werden muss. In onNewIntent() sollte vorheriger Mail-Inhalt in Entwürfen gespeichert werden und der darin geschriebene Inhalt zusammen mit der korrekten Empfängeradresse – Neji

Antwort

6

Auch wenn Sie zwei verschiedene Anwendungen verwenden, wird es in der Arbeit expected way:

  • wenn Ihr singleTask Aktivität bereits vorhanden ist, wird diese Kopie verwendet werden, wobei das Verfahren onNewIntent() aufgerufen wird
  • wenn es nicht vorhanden ist, wird es wie für normale

technisch ins Leben gerufen werden, um die Definition von Ihrem Link reproduzieren:

Das System erstellt eine neue Aufgabe und instanziiert die Aktivität unter dem 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 gleichzeitig existieren.Diese


kann leicht überprüft werden, indem making an activity a target for sharing text und singleTask im Manifest:

<activity 
     android:name=".MainActivity" 
     android:launchMode="singleTask"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/plain" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND_MULTIPLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 

nun einige Protokollierung der onCreate() und onNewIntent() Methoden hinzufügen und einige Szenario testen.


Etwas fand ich besonders nützlich, wenn die verschiedenen launchmodes testen, die folgende ADB-Befehl:

  • adb dumpsys activity activities

Dieses viel Text gibt (es kann helfen, das Telefon neu zu starten bevor Sie dies tun - adb reboot) zeigt Details der Aktivität Task-Stacks. Dies kann verwendet werden, um Ihnen zu zeigen, dass sich Ihre Aktivität "rehomiert", da sie über verschiedene Anwendungen gestartet wird.


Was die Frage nach den E-Mail, denke ich, dass Sie auf dem E-Mail-Client abhängen, aber ich würde hoffen, dass sie die onNewIntent() Methode richtig, und speichern Sie den aktuellen Entwurf behandeln, bevor Sie Ihre neue E-Mail-Anzeige .

+1

So eine SingleTask Aktivität hat nur eine Instanz auf einem Android-Gerät, dachte ich, dass singleTask Aktivität haben kann (oder kann erstellen) eine Instanz pro Anwendung. – nobalG

+0

Korrekt. Die Seite, auf die Sie verlinkt haben, ist so viel, aber es ist immer gut, diese Dinge zu überprüfen. Es macht ziemlich viel Spaß, mit dem Code zu spielen und diesen ADB-Befehl zu verwenden; es ergibt dann wirklich Sinn. Es gibt viele falsche Tutorials online, also seien Sie vorsichtig (Ich habe diese Untersuchung vor kurzem selbst und ich empfehle Ihnen es auch versuchen) –

+1

** EIN INSTANZ PRO ANDROID DEVICE ** verifiziert – nobalG

Verwandte Themen