Fluckysan Posté(e) 25 mars 2010 Share Posté(e) 25 mars 2010 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 ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 25 mars 2010 Share Posté(e) 25 mars 2010 (modifié) 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é 25 mars 2010 par Profete162 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 25 mars 2010 Auteur Share Posté(e) 25 mars 2010 (modifié) 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é 25 mars 2010 par Fluckysan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 25 mars 2010 Share Posté(e) 25 mars 2010 Mhh, en fait, la réponse à ton problème va peut-être m'aider à résoudre des problèmes de TaskOS... Je m'abonne au sujet et désolé de ne pas pouvoir t'aider plus :rolleyes: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dekans Posté(e) 25 mars 2010 Share Posté(e) 25 mars 2010 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). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 25 mars 2010 Auteur Share Posté(e) 25 mars 2010 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 ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zehunter Posté(e) 16 avril 2010 Share Posté(e) 16 avril 2010 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 :-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 16 avril 2010 Auteur Share Posté(e) 16 avril 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zehunter Posté(e) 16 avril 2010 Share Posté(e) 16 avril 2010 (modifié) 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é 16 avril 2010 par zehunter Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 16 avril 2010 Auteur Share Posté(e) 16 avril 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zehunter Posté(e) 16 avril 2010 Share Posté(e) 16 avril 2010 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) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 29 avril 2010 Auteur Share Posté(e) 29 avril 2010 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) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.