Depuis la page Application Fundamentals du guide de développement Android:
Par défaut, toutes les activités d'une application ont une affinité les unes pour les autres, c'est-à-dire qu'il y a une préférence pour qu'elles appartiennent toutes à la même tâche.
Une activité "singleInstance" est la seule activité de sa tâche. S'il démarre une autre activité, cette activité sera lancée dans une tâche différente quel que soit son mode de lancement - comme si FLAG_ACTIVITY_NEW_TASK était dans l'intention. À tous autres égards, le mode "singleInstance" est identique à "singleTask".
Comme indiqué ci-dessus, il n'y a jamais plus d'une instance d'une activité "singleTask" ou "singleInstance", de sorte que cette instance est censée gérer toutes les nouvelles intentions. Une activité "singleInstance" est toujours en haut de la pile (car c'est la seule activité de la tâche), elle est donc toujours en mesure de gérer l'intention. Cependant, une activité "singleTask" peut ou non avoir d'autres activités au-dessus d'elle dans la pile. Si tel est le cas, il n'est pas en mesure de gérer l'intention et l'intention est supprimée. (Même si l'intention est abandonnée, son arrivée aurait fait passer la tâche au premier plan, là où elle resterait.)
Puisqu'il n'y a jamais plus d'une instance de l'activité avec l'un ou l'autre des modes de lancement, le bouton de retour vous amènera toujours à l'instance existante de l'activité dans votre cas.
Une différence importante est que "singleTask" ne nécessite pas la création d'une nouvelle tâche pour les nouvelles activités lancées lorsque quelque chose est sélectionné. Il n'aura pas non plus à supprimer cette nouvelle tâche sur le bouton de retour à chaque fois.
Étant donné que votre pile d'activité appartient à une seule "tâche" utilisateur, et qu'il ne semble pas que vous ayez une structure Intent complexe où singleInstance peut être bénéfique pour toujours les gérer, je suggérerais d'utiliser le mode de lancement singleTask.
Voici un bon article de blog pour plus d'informations, ainsi que crédité pour l'image: Série Activités et tâches Android - Une introduction au modèle de composant d'interface utilisateur d'Android
FLAG_ACTIVITY_CLEAR_TOP
.D'une manière simple-
singleTask:
Le système crée une nouvelle tâche et instancie l'activité à la racine de la nouvelle tâche. Cependant, si une instance de l'activité existe déjà dans une tâche distincte, le système achemine l'intention vers l'instance existante via un appel à sa
onNewIntent()
méthode, plutôt que de créer une nouvelle instance. Seuleone instance
l'activité peut exister à la fois.seule instance-
Identique à
"singleTask"
, sauf que le système ne lance aucune autre activité dans la tâche contenant l'instance . L'activité est toujours le seul et unique membre de sa tâche; toutes les activités démarrées par celui-ci s'ouvrent dans une tâche distincte .la source
singleTask
et lessingleInstance
activités ne peuvent que commencer une tâche. Ils sont toujours à la racine de la pile d'activités. De plus, l'appareil ne peut contenir qu'une seule instance de l'activité à la fois - une seule de ces tâches.pour plus d' Android: launchMode .
la source
singleTask
- Le système crée une nouvelle tâche et instancie l'activité à la racine de la nouvelle tâche. Cependant, si une instance de l'activité existe déjà dans une tâche distincte, le système achemine l'intention vers l'instance existante via un appel à saonNewIntent()
méthode, plutôt que de créer une nouvelle instance. Une seule instance de l'activité peut exister à la fois. pour plus de developer.android.com