Aller au contenu

Activitys et stack, enchaînement des écrans


Fluckysan

Recommended Posts

Salut,

je poste car je suis en train de m'emmêler les pinceaux, je suis en train de dév un Widget et je ne m'en sors pas quand au stack et l'affichage des Activitys :

  • Mon app a une Activity principale qui peut se lancer via le menu
  • On peut aussi lancer une Activity depuis le Widget

Or j'ai 2 soucis :

  • Lorsque je sors de l'Activity principale via le bouton Home et que je lance mon Activity via le Widget, celle-ci "s'empile" sur l'accueil (c'est une Activity transparente), c'est un comportement normal puisque les Activitys s'empilent sur le stack mais j'aimerais que l'accueil ne soit plus là
  • Si je lance plusieurs fois l'Activity du Widget, elle s'empile à nouveau sur le stack alors que j'aimerais que la même instance de l'Acticity en question soit utilisé avec un onNewIntent(intent)

Je regarde du côté des lauchMode et des FLAG pour intent mais j'avoue que je m'en sors pas, je ne dois pas utiliser les bons

Pouvez-vous m'éclairer pour que j'arrive à avoir le comportement souhaité (une Activity à la fois en gros) ?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

J'avais déjà eu ce genre de problème et le FLAG_ACTIVITY_NEW_TASK m'avait beaucoup aidé, j'espère qu'il en sera de même pour toi. (If set, this activity will become the start of a new task on this history stack.)

(petit message perso: c'est voulu cette écriture en vert à chaque fois? C'est vraiment pas facile pour la lisibilité et si tout le monde met sa propre couleur, on va pas s'en sortir... Mais bon, c'est juste un avis perso d'utilisateur.)

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

Justement j'ai testé avec FLAG_ACTIVITY_NEW_TASK et j'ai le même comportement

Mon Manifest :

                    android:name=".AppConfig"
           android:label="@string/app_name">







           android:name=".ConfigWidget"
           android:theme="@android:style/Theme.Light">






           android:name=".App"
           android:theme="@android:style/Theme.Translucent">

Et mon Activity .App est lancée grâce à un PendingIntent sur le Widget avec FLAG_ACTIVITY_NEW_TASK

Quand je sors de mon Activity principale avec la touche Home et que je lance .App via le Widget il vient sur l'accueil. Si j'appuie à nouveau sur Home puis que je relance .App via le Widget il vient dessus les 2 Activity déjà présentes

(L'écriture en vert est tout à fait voulue, elle permet de plus vite voir où j'ai posté donc ce que je n'ai pas lu

Je ne pensais pas qu'elle génait ...)

Modifié par Fluckysan
Lien vers le commentaire
Partager sur d’autres sites

pour avoir une instance unique de ton activity, définis-la comme "singleTop" dans le manifest.

Avec l'éditeur dans Éclipse c'est facile à trouver.

Pour le premier point, tu peux toujours faire un finish() dans ton onStop(), mais ce n'est pas forcément le comportement que tu cherches (cette activity disparaitra systématiquement de la stack).

Lien vers le commentaire
Partager sur d’autres sites

Oki pour le singleTop, je vais tester :)

Je m'étais effectivement emmêler les pinceaux, je viens de régler les comportements bizarre (Je mettais le flag sur le PendingIntent au lieu de l'Intent ... Pôtaper !)

C'est justement le comportement que je souhaite pour le onStop() :D

Merci Dekans

PS : Profete, tu as quoi comme soucis ?

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

interessant sujet :)

j'ai moi meme un soucis similaire sur une activity A qui lance une seconde activity B.

si je presse sur Home, et relance l'activity A, je reviens sur A (se que je souhaite), mais quand je presse sur back, je reviens sur B, et un nouveau click sur back je reviens sur A pour enfin revenir sur la Home si je presse une 3eme fois sur Back.

une idée de se que j'ai "loupé" parce que j'ai beau cherché je trouve pas :-(

merci par avance pour votre aide :-)

Lien vers le commentaire
Partager sur d’autres sites

Il faut que tu nous dises le comportement que tu souhaites avoir pour ton app :)

En fonction de ça, il faut flager tes Intents et / ou régler tes Activity (via onStop etc) suivant leur cycle de vie : http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Une application simple, donc sans flags dans les Intents et une seule tâche, se visualise comme une pile (le stack)

Dans ton cas tu lances A puis B donc B s'empile sur A ===> ta pile est AB (a droite la dernière Activity)

Lorsque tu appuis sur Home puis que tu relance ton app un autre A vient s'empiler sur B ===> ta pile est ABA

Lorsque tu appuis sur Back, cela dépile ton stack et tu comprends donc le comportement :)

Il faut se pencher sur les flags et sur le comportement voulu de ton app

Lien vers le commentaire
Partager sur d’autres sites

Il faut que tu nous dises le comportement que tu souhaites avoir pour ton app :)

En fonction de ça, il faut flager tes Intents et / ou régler tes Activity (via onStop etc) suivant leur cycle de vie : http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Une application simple, donc sans flags dans les Intents et une seule tâche, se visualise comme une pile (le stack)

Dans ton cas tu lances A puis B donc B s'empile sur A ===> ta pile est AB (a droite la dernière Activity)

Lorsque tu appuis sur Home puis que tu relance ton app un autre A vient s'empiler sur B ===> ta pile est ABA

Lorsque tu appuis sur Back, cela dépile ton stack et tu comprends donc le comportement :)

Il faut se pencher sur les flags et sur le comportement voulu de ton app

clairement je ne veux pas d'enpilage a l'infini.

soit on fait A => B => Home et quand on relance l'appli on reviens sur B

soit on fait A => B => Home et quand on relance l'appli on reviens sur A

mon choix est partagé entre les deux, mais pas de ABABABA c'est sur :) surtout que bientot il y aura une activity C :-)

je vais voir cette doc et je vous dit si je la comprend on pas :-)

EDIT: en fait c'est etrange ... je suis avec mon emulateur, et lors du premier start de mon appli j'ai le comportement que je n'aime pas (ABA) mais quand je quitte ton et que je relance, j'ia ensuite ca :

A=>B=>Home puis restrart de l'appli => B (soit le premier sénario qui me conviendrais)

vous avez deja vu ça?

Modifié par zehunter
Lien vers le commentaire
Partager sur d’autres sites

clairement je ne veux pas d'enpilage a l'infini.

soit on fait 1 => B => Home et quand on relance l'appli on reviens sur B

soit on fait A => B => Home et quand on relance l'appli on reviens sur A

Ca va être dur d'avoir 2 comportements pour le même cheminement !

Soit ton app affichera A soit elle affichera B lorsque tu la relancera mais il faut choisir :o

Lien vers le commentaire
Partager sur d’autres sites

clairement je ne veux pas d'enpilage a l'infini.

soit on fait 1 => B => Home et quand on relance l'appli on reviens sur B

soit on fait A => B => Home et quand on relance l'appli on reviens sur A

Ca va être dur d'avoir 2 comportements pour le même cheminement !

Soit ton app affichera A soit elle affichera B lorsque tu la relancera mais il faut choisir :o

je disait jsute que ces 2 scenario me conviendrais sans soucis :) j'ai pas de preference pour le moment. quoi que j'aimerais bien savoir ce qu'il faut faire pour forcé un comportement ou l'autre (quel sont les differences dans le code/manifest)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Arf désolé de répondre si tard, j'avais pas vu que tu avais posté à ton tour

Donc pour les 2 comportements :

A => B => Home et quand on relance l'appli on reviens sur B :

Ici c'est le comportement par défaut de l'application, l'Activity B sera celle en haut de la pile donc elle sera visible quand tu reviens sur l'appli (sauf si Android a kill ton appli, dans ce cas c'est A qui sera affiché puisque l'appli se relancera)

A => B => Home et quand on relance l'appli on reviens sur A :

Dans ce cas il faut que tu mettes un finish(); dans ton onStop(){} ce qui fait que dès que ton Activity ne sera plus visible, elle sera quittée (en prenant soins de prévoir les différents cas pour ne pas tous le temps la quitter suivant ce que tu veux)

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...