Frage

In meinem Android-App, Ich habe eine Haupttätigkeit, die als Einstiegspunkt zu meiner Anwendung dient, die in meiner Manifest-Datei wie folgt konfiguriert ist:

<activity android:name=".Main"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:alwaysRetainTaskState="true"
              android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

So für einen bestimmten Anwendungsfall, kann sagen, ein Benutzer die App aus dem Home-Bildschirm startet durch das Symbol in dem Anwendungs-Launcher klicken. Nach dem Start der App entscheidet der Benutzer navigiert von der Haupttätigkeit auf die Aktivität A und dann schließlich auf Aktivität B. An diesem Punkt der Benutzer ihre Facebook zu überprüfen, so dass sie die Home-Taste klicken meine App im Hintergrund zu setzen, und Kutter die Facebook App.

Nach ihrer Facebook Überprüfung der Benutzer möchte meine App zurückkehren, so dass sie die Home-Taste drücken, und starten Sie die Anwendung von Anwendungs-Launcher (wie sie das erste Mal tat es gestartet wurde).

Wenn ein Benutzer kehrt in meine app, ich die App auf Rückkehr in die letzten Aktivität will bei dem Benutzer war, wenn die App in den Hintergrund gestellt, die in diesem Fall Aktivität B. In der Manifest-Datei ist, habe ich Set alwaysRetainTaskState = true, um sicherzustellen, das Betriebssystem nicht meine App-Aktivitäten nicht töten.

Nun zu meiner Frage: Wie bekomme ich das Verhalten, das ich oben beschrieben? Jedes Mal, wenn ich meine App-Symbol klicken, es beginnt immer bei der Haupttätigkeit, nein, was Materie. Ich denke, dass dies wegen des category.LAUNCHER Attributs ist. Ich habe versucht, android: launchMode = singleTask, aber es hat keinen Unterschied gemacht; es beginnt immer am Main.

Wenn jemand Absicht Filter klären könnten, Launch-Modi und Aufgaben, das wäre toll!

War es hilfreich?

Lösung

Ich löste dies durch die raster DispatcherActivity zugab und die Standard sie eines (durch die gleiche Absicht Filter verwenden). In seiner onCreate Methode erstellen Sie und die Absicht auf einem vernünftigen Standard (Ihre Haupttätigkeit zum Beispiel), basierend Anruf oder basierend auf einigen Token, das identifiziert gespeichert, die Aktivität gestartet werden soll. Das Token wird in onStop Verfahren nach Aktivität, die Sie anrufen möchten, beim Neustart gespeichert / aktualisiert. Sie können diese Token-Einstellungen speichern.

Die rationale hier ist die letzte Aktivität, die sichtbar war, wird OnStop Methode ausgeführt wird, wenn unterbrochen.

Ein Wort der Warnung hier: Ich habe dieses Muster implementieren und es funktionierte recht gut. Jedoch scheint spielt es nicht allzu gut mit der Geschichte und schließlich gab ich einfach auf und riss diesen Code aus. Niemand beschwerte sich so weit.

Andere Tipps

FYI singleTask ist nicht das, was Sie wollen, da sie eine neue Aufgabe beginnt:

http://developer.android.com/guide/ Themen / manifest / aktivitäts element.html # Lmode

Wie starten Sie Aktivität B? Alle Nicht-Standard-Start-Modi oder Intent Flaggen?

Für alle hier mit ähnlichen Problemen kommen, fand ich etwas seltsam, das sein könnte, was Sie sehen ... vielleicht.

sagen, ich habe eine App mit Aktivitäten A -> B -> C usw. Ich war Probleme mit meiner app, die immer „Wiederaufnahme“ zu A, wenn es aus der App-Liste ins Leben gerufen wurde aka Launcher. Wiederaufnahme aus dem „ärgert“ -Bildschirm (lange zu Hause drücken) wäre richtig Lebenslauf Verhalten zeigen, obwohl (Lebenslauf B oder C wie erwartet). Mein Manifest war nichts Besonderes, ich habe alwaysRetainTaskState = "true" Set in meiner Stammaktivität und Startmodus ist Standard (Standard).

Ich war das Laden der apk auf mein Handy über eine Webseite . Nach dem Download und die Installation von würde ich „Open“ drücken Sie die App sofort zu starten. Aus irgendeinem Grunde (nach der App zu deinstallieren) ich wieder müde Herunterladen, Installieren, aber dann habe ich die Taste anstelle „Fertig“ gedrückt. Dann startet die App aus dem Launcher / „Alle Apps“ -Liste hat das gleiche Lebenslauf Verhalten wie von recents wieder aufnehmen - mit anderen Worten, meine Probleme sind irgendwie wegen des Installationsprozesses verursacht werden, wenn „Open“ statt „Erledigt“ klicken.

Ich überprüfte diese "Lösung" auf API10 (2.3.5) und API15 (4.0.4)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top