web-dev-qa-db-fra.com

Android mode de lancement singleTask ou singleInstance?

J'ai une application dont l'activité principale est une liste. Vous pouvez ensuite cliquer sur des éléments pour ouvrir 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 comporte qu'une instance sur la pile, de sorte que les utilisateurs puissent effectuer plusieurs recherches. Un clic en arrière les ramènerait à la vue précédente dans laquelle ils se trouvaient avant de commencer la recherche (plutôt que de revenir aux résultats de la recherche précédente).

les modes de lancement singleTask et singelInstance semblent faire ce que je veux, donc je ne suis pas sûr de celui que je devrais utiliser à cette fin et pourquoi?

84
Kman

À partir de la page Principes de base de l'application du Android dev guide:

Par défaut, toutes les activités d'une application ont une affinité entre elles, c'est-à-dire qu'elles préfèrent toutes appartenir à la même tâche.

Une activité "singleInstance" est la seule activité à mener à bien. 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 les 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 au sommet de la pile (puisqu'il s'agit de la seule activité de la tâche), elle est donc toujours en position de gérer l'intention. Cependant, une activité "tâche unique" peut avoir ou non d'autres activités au-dessus de celle-ci dans la pile. 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 amené la tâche à apparaître au premier plan, là où elle resterait.)

4 Activities in a Task

Etant donné qu’il n’ya jamais plus d’une instance de l’Activité dans l’un ou l’autre mode de lancement, le bouton Précédent vous ramè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 en cours de lancement lorsqu'un élément est sélectionné. Il ne devra pas non plus supprimer cette nouvelle tâche du bouton de retour à chaque fois.

Étant donné que votre pile d’Activités appartient à une seule "tâche" utilisateur et qu’il ne semble pas que vous ayez une structure d’intention complexe dans laquelle singleInstance peut être bénéfique, nous vous suggérons d’utiliser toujours le mode de lancement singleTask.

Voici un bon article de blog pour plus d’informations, ainsi que pour l’image: série Activités et tâches Android - Introduction au modèle de composant d’interface utilisateur d’Android

141
Guzba

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. 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 à sa méthode onNewIntent(), plutôt que de créer une nouvelle instance. Seulement one instance de l'activité peut exister à la fois.

Remarque: bien que l'activité démarre dans une nouvelle tâche, le bouton Précédent ramène néanmoins l'utilisateur à l'activité précédente.

singleInstance -

Pareil que "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 celui-ci sont ouvertes dans une tâche distincte.

30
Tarun Varshney

Les activités singleTask et singleInstance ne peuvent commencer qu'une tâche. Ils sont toujours à la base de la pile d'activités. De plus, l'appareil ne peut contenir qu'une instance de l'activité à la fois, mais une seule de ces tâches.
pour plus Android: launchMode .

4
Rupesh Yadav