J’ai une application qui a une liste comme activité principale et vous pouvez ensuite cliquer sur les éléments qui ouvrent une vue détaillée de cet élément. J’ai également une activité de recherche similaire à l’activité principale et qui fonctionne comme prévu.
Cependant, je souhaite que cette activité de recherche ne contienne qu’une seule instance sur la stack afin que les utilisateurs puissent effectuer des recherches à plusieurs resockets et cliquer sur le bouton précédent pour revenir aux résultats de la recherche précédente.
le mode de lancement singleTask et singelInstance semble faire ce que je veux donc je ne suis pas sûr de savoir lequel utiliser et pourquoi?
À partir de la page Principes de base des applications du guide de développement Android:
Par défaut, toutes les activités d’une application ont une affinité mutuelle, c’est-à-dire qu’elles préfèrent toutes appartenir à la même tâche.
Une activité “unique” est la seule activité dans 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. A tous autres égards, le mode “singleInstance” est identique à “singleTask”.
Comme indiqué ci-dessus, il n’y a jamais plus d’une instance d’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 stack (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 dans la stack. Si c’est le cas, il n’est pas en mesure de gérer l’intention et l’intention est abandonnée. (Même si l’intention est abandonnée, son arrivée aurait provoqué la tâche au premier plan, où elle restrait.)
Comme il n’y a jamais plus d’une instance de l’activité avec le mode de lancement, le bouton Précédent vous amène 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 ne sera pas non plus nécessaire de supprimer cette nouvelle tâche sur le bouton arrière à chaque fois.
Étant donné que votre stack d’activités ne concerne qu’un seul utilisateur “tâche”, et que vous ne semblez pas avoir une structure d’intention complexe où singleInstance peut être utile pour toujours les gérer, je suggère d’utiliser le mode de lancement singleTask.
Voici un bon article de blog pour plus d’informations, ainsi que pour l’image: Série d’activités et de tâches Android – Présentation du modèle de composant d’interface utilisateur d’Android
De manière simple-
singleTask:
Le système crée une nouvelle tâche et instancie l’activité à la racine de la nouvelle tâche. Toutefois, 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 de sa méthode onNewIntent()
, plutôt que de créer une nouvelle instance. Une one instance
de l’activité peut exister à la fois.
Remarque: Bien que l’activité commence dans une nouvelle tâche, le bouton Retour renvoie toujours l’utilisateur à l’activité précédente.
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 lancées par celle-ci s’ouvrent dans une tâche distincte .
singleTask
activités singleTask
et singleInstance
peuvent uniquement commencer une tâche. Ils sont toujours à la racine de la stack 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 .