2012-06-06 2 views
7

Nehmen wir an, wir haben zwei Aktivitäten.

A - Haupttätigkeit, das heißt „Home Launcher aktiviert“ (richtiger Absicht Filter etc.)

B - Task Wurzelaktivität mit singleTask Spezifikation und mit benutzerdefinierten taskAffinity (es kann nur eine Instanz dieser Aktivität sein) (zu Unterscheiden Sie, ob von der Hauptaufgabe root).Wie kann die Task "SingleTask" mit taskAffinity aus den letzten Aufgaben entfernt werden, wenn sie fertig ist?

Nehmen wir an, dass B eine Aufgabe darstellt, die nur dann gültig ist, wenn sie nicht beendet ist. Wenn Sie sie nach der Beendigung nicht erneut ausführen oder neu starten, ist dies keine Option.

Zu einem bestimmten Zeitpunkt - A startet B, um eine neue Aufgabe zu beginnen. Das Ziel besteht darin, B aus der Liste der letzten Aufgaben zu entfernen, wenn der Benutzer B beendet hat. Der Benutzer kann von B zu anderen Aufgaben navigieren (mit Home Long Press) und dann zurück zu B navigieren, solange er nicht beendet ist. Das Starten von A aus dem Launcher bringt B nicht in den Vordergrund, da sie unterschiedliche Aufgabenaffinitäten haben.

Android erkennt B als Wurzel einer Aufgabe, daher ist B in der Liste der zuletzt verwendeten Aufgaben sichtbar, auch wenn es fertig ist, und der Benutzer kann immer wieder darauf zurückgreifen. Es ist keine Lösung, B zu der einen Aufgabe mit A zu bewegen, weil in der Zeit, in der B läuft, der Benutzer in der Lage sein sollte, zwischen den Aufgaben A und B zu wechseln. Das Hinzufügen von excludeFromRecents zum Manifest von B entfernt es vollständig aus der Liste der letzten Aufgaben, und es ist auch eine schlechte Lösung.

Wie erreichen? (Sorry für mein schlechtes Englisch)

+0

Berufung finish() in onResume(), wenn Aufgabe beendet ist, nicht wahr? – pawelzieba

+0

Aber es bleibt noch in der letzten Aufgabenliste –

+0

@MichaelP Haben Sie es nie in den letzten Aufgaben angezeigt werden soll? Oder einfach verschwinden, wenn Sie fertig sind? –

Antwort

3

Standard-Antwort

Leider der Überbringer schlechter Nachrichten sein, aber diese Funktionalität nicht Standardverfahren verwendet werden erreicht, ohne das Überschreiben die Art und Weise, dass Ihre Anwendung funktioniert. Selbst dann funktioniert es nur so lange, wie Ihre App läuft. Außerdem erfordert dies ein gerootetes Gerät mit einem speziellen ROM, da Sie die Funktionalität der Home-Schaltfläche sowieso nicht überschreiben können. Sie können nur auf onNewIntent() reagieren, die nicht ausgelöst wird, wenn Sie die Home-Taste lange drücken.

Letzte Tasks ist speziell für die Benutzerfreundlichkeit, damit sie zu den Apps zurückkehren können, die sie verwendet haben, unabhängig davon, ob die App ausgeführt wird. Es gibt jedoch gute Nachrichten. Dieser Prozess hält Ihre App nicht am Leben! Es ist einfach ein Symbol, das auf Ihr Paket zeigt.

Leider bedeutet dies, dass, wenn Ihre App noch läuft, etwas anderes vor sich geht, das sie am Laufen hält.

Nicht-Standard-Antwort

Es kann durch Bearbeiten der Paketeigenschaften während der Laufzeit (viel in der gleichen Art und Weise, die Sie/deaktivieren Komponenten von Java-Code aktivieren können) möglich sein. Davon wird dringend abgeraten, denn Recent Tasks ist eine Usability-Funktion der Android-Kernplattform. Dies würde einige Nachforschungen erfordern.

0

Ein wenig spät, aber das ist immer noch der Top-Hit bei Google. Eine mögliche Lösung finden Sie unter this.

In Ihrem Fall müssen Sie:

  • eine neue Aktivität erstellen C ExitActivity genannt, und manifestieren Fahnen hinzufügen, wie in der anderen Antwort beschrieben.
  • Aktivität B sollte die folgenden Attribute im Manifest haben: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • die Aufgabe Affinität Attribut auf C gesetzt werden die gleichen sein wie B
  • Der Aufruf von Intent.addFlags im ExitActivity sollte nur die letzten drei: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Verwandte Themen