web-dev-qa-db-fra.com

Définition de launchMode = "singleTask" vs activité de définition launchMode = "singleTop"

J'ai une application très hiérarchisée (les activités sont similaires à Ligue> Équipe> Position> Joueur) et j'ai donc rendu chaque activité singleTop plus précise afin de garder une navigation judicieuse et d'éviter les doublons.

Maintenant, je suis en train de créer ma deuxième application et je l’ai vu suggérer de déclarer ma candidature singleTask afin d’éviter les doublons. Quelqu'un pourrait-il aider à expliquer les avantages de chaque approche?

Ma nouvelle application est juste une activité avec 3 fragments et ensuite je vais probablement ajouter une activité de paramètres et peut-être une FAQ.

EDIT: Je viens de me rendre compte que singleTask n’empêche PAS les instances dupliquées de mon application, comme je le pensais. Maintenant, cherchez la bonne façon de gérer cela ...

52
NSouth

Je pense que votre définition de singleTop et singleTask est un peu décalée. SingleTop pourrait produire une instance en double. Permet d'utiliser votre exemple, Ligue> Équipe> Position> Joueur. S'il y a un bouton dans l'écran du joueur qui vous mènera à l'écran de la ligue, il deviendra Ligue> Équipe> Position> Joueur> Ligue.

Considérant que singleTask garantit qu’une seule instance de l’activité peut exister.

70
CChi

Mode de lancement d'activité Android

4 modes ...

"standard" "singleTop" "singleTask" "singleInstance"

Le mode par défaut est "standard".

Les modes se divisent en deux groupes. standard et singleTop viennent d'un côté et singleTask et singleInstance de l'autre.

La principale différence entre standard et singleTop réside dans la définition standard. Chaque fois qu'une nouvelle intention d'activité standard est créée, une nouvelle instance est créée. Dans le cas de singleTop également, une nouvelle instance est créée mais une instance de l'activité est déjà en haut de la pile, elle ne créera pas de nouvelle instance.

En fait, le problème vient du fait que nous téléchargions une application depuis un serveur et que nous la lançions et l'ouvrions à partir de là même. Après avoir lancé l'application, appuyez sur le bouton d'accueil. Cliquez ensuite sur tous les programmes et sélectionnez l'icône de l'application à partir de l'écran d'accueil. Ensuite, une autre activité sera créée dans le cas de la norme, mais dans singleTop, aucune nouvelle instance ne sera créée.

Les modes "singleTask" et "singleInstance" diffèrent également l'un de l'autre sous un seul aspect: une activité "singleTask" permet à d'autres activités de faire partie de sa tâche. C'est à la base de la pile d'activités, mais d'autres activités (nécessairement des activités "standard" et "singleTop") peuvent être lancées dans la même tâche. En revanche, une activité "instance unique" ne permet à aucune autre activité de faire partie de sa tâche. C'est la seule activité dans la tâche. S'il démarre une autre activité, cette activité est affectée à une tâche différente - comme si FLAG_ACTIVITY_NEW_TASK était dans l'intention.

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-Android.html

26
Selva

J'ai trouvé la réponse ici: http://www.intridea.com/blog/2011/6/16/Android-understanding-activity-launchmode

"singleTop":

La différence par rapport à 'standard' est que si une instance d'activité existe déjà en haut de la tâche actuelle et que le système route l'intention de cette activité, aucune nouvelle instance ne sera créée car elle déclenchera une méthode onNewIntent () au lieu de créer une nouvel objet. Prenons par exemple l'intégration Twitter-oauth.

"singleTask":

Une nouvelle tâche sera toujours créée et une nouvelle instance sera poussée dans la tâche en tant que racine. Cependant, si une instance d'activité existe dans une tâche, le système route l'intention vers cette instance d'activité via l'appel de la méthode onNewIntent (). Dans ce mode, les instances d'activité peuvent être poussées vers la même tâche. Et si l'utilisateur clique sur la clé BACK à partir de l'activité singleTask, le système renvoie l'utilisateur à l'activité précédente.

15
M.Hefny

De Comprendre le mode de lancement de l'activité :

standard (par défaut): - Plusieurs instances de la classe d'activité peuvent être instanciées et plusieurs instances peuvent être ajoutées à la même tâche ou à des tâches différentes. C'est le mode commun pour la plupart des activités.

singleTop: - La différence par rapport au standard est que si une instance de l'activité existe déjà en haut de la tâche en cours et que le système achemine l'intention vers cette activité, aucune nouvelle instance ne sera créée car elle déclenchera une méthode onNewIntent (). au lieu de créer un nouvel objet.

singleTask: - Une nouvelle tâche sera toujours créée et une nouvelle instance sera poussée dans la tâche en tant que racine. Cependant, si une instance d'activité existe dans une tâche, le système route l'intention vers cette instance d'activité via l'appel de la méthode onNewIntent (). Dans ce mode, les instances d'activité peuvent être poussées vers la même tâche. Ce mode est utile pour les activités qui servent de points d’entrée.

singleInstance: - Identique à singleTask, sauf que l'instance no activities peut être insérée dans la même tâche que celle de singleInstance. En conséquence, l'activité avec le mode de lancement est toujours dans une tâche d'instance d'activité unique. Ce mode est très spécialisé et ne doit être utilisé que dans des applications entièrement mises en œuvre en une seule activité.

5
since k saji