Ich bin dabei, (endlich) das Kapitel über Aufgaben für mein Buch zu schreiben, und ich stoße auf ein paar lange Rätsel.Was sind die Unterschiede zwischen FLAG_ACTIVITY_RESET_TASK_IF_NEEDED und FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP?
Dinge, die als Home-Bildschirm Werfer dienen scheinen, um die Kombination von FLAG_ACTIVITY_NEW_TASK
und FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
zu verwenden, wenn sie die angeforderte Launcher Aktivität starten:
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
The documentation for FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
hat:
Wenn gesetzt, und diese Aktivität Wird entweder in einer neuen Aufgabe gestartet oder eine vorhandene Aufgabe an die Spitze gebracht, dann wird sie als erste Tür der Aufgabe gestartet. Dies führt dazu, dass alle Affinitäten angewendet werden, die erforderlich sind, um diese Aufgabe in den richtigen Zustand zu bringen (indem entweder Aktivitäten zu oder von ihr verschoben werden) oder diese Aufgabe bei Bedarf einfach in ihren Anfangszustand zurückgesetzt wird.
Das ist nicht besonders klar.
Insbesondere scheint es, dass die gleichen Effekte unter Verwendung einer Kombination von FLAG_ACTIVITY_CLEAR_TOP
und FLAG_ACTIVITY_SINGLE_TOP
zu sehen wären. Zitiert die Dokumentation für FLAG_ACTIVITY_CLEAR_TOP
:
Wenn gesetzt, und die Aktivität gestartet wird, ist bereits in der aktuellen Aufgabe ausgeführt wird, dann anstatt eine neue Instanz dieser Aktivität starten, alle anderen Aktivitäten auf der Spitze wird es sein, geschlossen und diese Absicht wird an die (jetzt oben) alte Aktivität als neue Absicht gesendet ...
Die aktuell ausgeführte Instanz von [die gewünschte Aktivität] erhält entweder die neue Absicht, die Sie hier starten, in ihrem onNewIntent() Methode, oder sei selbst beendet und mit der neuen Absicht neu gestartet. Wenn der Startmodus auf "multiple" (Standard) festgelegt wurde und Sie FLAG_ACTIVITY_SINGLE_TOP nicht in derselben Absicht festgelegt haben, wird er beendet und neu erstellt. Für alle anderen Startmodi oder wenn FLAG_ACTIVITY_SINGLE_TOP gesetzt ist, wird diese Absicht an onNewIntent() der aktuellen Instanz übergeben.
Die FLAG_ACTIVITY_CLEAR_TOP
Dokumentation macht Sinn, zumindest für mich.
Also, was macht FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
das ist anders als die Kombination von FLAG_ACTIVITY_CLEAR_TOP
und FLAG_ACTIVITY_SINGLE_TOP
?
Bonuspunkte, wenn Sie erklären kann, was FLAG_ACTIVITY_CLEAR_TASK
tut das aus einem der anderen beiden oben beschriebenen Optionen unterscheidet.
Wenn diese Eigenschaft in einem Intent an Context.startActivity() übergeben wird, bewirkt dieses Flag, dass vor dem Start der Aktivität alle vorhandenen Aufgaben gelöscht werden, die der Aktivität zugeordnet werden. Das heißt, die Aktivität wird zur neuen Wurzel einer ansonsten leeren Aufgabe, und alle alten Aktivitäten sind beendet. Dies kann nur in Verbindung mit FLAG_ACTIVITY_NEW_TASK verwendet werden.
Ein offensichtlicher Unterschied zwischen diesem und FLAG_ACTIVITY_CLEAR_TOP
| FLAG_ACTIVITY_SINGLE_TOP
ist das FLAG_ACTIVITY_CLEAR_TASK
benötigt FLAG_ACTIVITY_NEW_TASK
. Aber abgesehen davon scheint es, als wären die Nettoeffekte gleich und stimmen auch mit FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
überein.
Ich erinnere mich, dass 'FLAG_ACTIVITY_RESET_TASK_IF_NEEDED' etwas Bestimmtes tun, wenn es mit' FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET' verwendet wird, aber anscheinend ist dieses Flag jetzt veraltet und seine Dokumentation ist verschwunden ([altes Dokument kann hier gefunden werden] (http://grepcode.com/file) /repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/content/Intent.java#Intent.0FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)). Es heißt jetzt, 'FLAG_ACTIVITY_NEW_DOCUMENT' zu verwenden, aber ich bin mir nicht sicher, ob es genau dasselbe tut. Das ist ein wenig verwirrend ... – Dalmas
@Dalmas das ist nur eine Umbenennung. Wenn Sie sich den Code ansehen, wird NEW_DOCUMENT gleich CLEAR_WHEN_RESET gesetzt. Sie sind das Gleiche. –