Jump to content

Application singleton ?


DevPunk13

Recommended Posts

Hello,

je fais du dev android depuis peu, et je bloque sur quelquechose.

En fait j'ouvre mon application, je la réduis en appuyant sur le bouton home de mon téléphone, et lorsque je la réouvre par l'icone du lanceur d'application, c'est une nouvelle instance qui s'ouvre et non la précédente qui se réaffiche. Sachant que c'est une application qui joue des sons ça devient vite la cacophonie, car il n'y a plus de moyen de fermer l'application hormis avec un killer d'application ou par les paramètres.

J'ai trouvé pas mal de solutions à ce problème mais ça ne résoud rien, selon les version d'android le problème persiste (en fait il n'y a que en 4.1 que le problème n'arrive pas).

Donc ma question est la suivante: Y a t il une solution cross-version qui permet que lorsqu'on ouvre une application, cela restaure la précédente instance de l'application si il y en a une (ou d'en ouvrir une nouvelle si ce n'est pas le cas) et si oui laquelle ?

Merci par avance.

Link to comment
Share on other sites

Sous Android, il ne peut y qu'une seule instance par application donnée. Ce n'est donc pas la source de ton problème.

En fait quand tu parles d'application, je présume que tu veux plutôt parler d'un écran de ton application. Dans Android, les applications sont formées de composants (écrans = Activities, tâches d'arrière-plan = Services, ...), et ces composants sont gérés par Android, en terme de création, destruction, etc.. Dans l'exemple d'utilisation que tu indiques, le nouvel appel de l'écran principal de ton application peut se faire en réutilisant l'instance précédente de cette Activity, ou bien une nouvelle instance, mais dans ce cas, la précédente aura été détruite au préalable.

Ceci dit, dans le cas de ton application, vu qu'elle joue des sons en arrière-plan, ce n'est pas un problème d'Activity, mais plutôt de Service (tu utilises bien un Service pour cette fonctionnalité ? si non, tu as déjà une cause du mal fonctionnement de ton appli ). Que fait tu dans ce service pour jouer tes sons ? tu lances un Thread ? une AsyncTask ? ... ?

Peux-tu nous expliciter un peu plus le problème ?

Link to comment
Share on other sites

  • 2 weeks later...

Euh je n'utilise pas de service ou du moins je ne pense pas.

En gros, tu as une première activité qui te permet de choisir un son. Une fois que tu l'as choisis, ça lance une seconde activité qui joue ce son (j'utilise la classe native MediaPlayer pour ça).

Lorsque j'appuie sur le bouton home, l'application passe en arrière plan mais le son continue d'être joué, et ce sur tous les téléphones et vm sur lesquelles j'ai testé, voilà pourquoi je n'ai pas cherché plus loin, de faire ça via des services.

Ensuite si via le launcher tu relance l'application, là le comportement est différent selon les version d'Android et les ROMS.

Sur mon téléphone et sur des VM je n'ai pas de soucis, c'est bien la seconde activité qui se réaffiche. Par contre, sur tous les autres téléphones sur lesquels j'ai pu tester, c'est toujours la 1ere activité qui se relance. Ce qui fait que tu peux rechoisir un son et lancer la seconde activité. ce qui instancie à nouveau un media player et qui joue les deux sons en même temps.

Ce que je cherche à faire est que si je réduis l'application en étant sur la seconde activité, lorsqu'on revient dedans, on retourne systématiquement sur la seconde (comme cela se passe sur mon téléphone).

D'après ce que j'ai cru comprendre c'est au niveau du OnCreate que ça doit se jouer mais j'ai du mal à comprendre comment je peux faire poure revenir sur ma seconde activité uniquement dans ce cas là.

Link to comment
Share on other sites

Si tu utilisais un Service, je pense que tu le saurais ;). Donc tu n'en utilises pas...

Comme je te le disais, c'est déjà une source de (mal-)fonctionnement de ton application. Il va falloir que tu passes par là, et implémenter le lecteur de son via un Service. C'est le seul moyen de garantir qu'un traitement puisse être effectué en arrière-plan. Cela "complique" peut-être un peu les choses, il va falloir que tes Activités se lie avec le service, pour connaitre l'état dans lequel celui-ci se trouve (en train de jouer ou non un son), et adaptent leur affichage en conséquence; mais c'est tout à fait réalisable

Et c'est la seule solution pour arriver à une application qui fonctionne comme tu le souhaites, sans avoir un comportement qui semble aléatoire en fonction des plate-formes (dans les exemples que tu cites, il n'y a pas de réel comportement aléatoire, c'est juste que, vu que c'est Android qui gère l'instanciation/destruction des composants de ton appli, RIEN ne te garantit qu'une activité, une fois quittée, sera réutilisée; ce peut très bien être une nouvelle instance, la précédente ayant été détruite; donc, tu es dans tous les cas face à un comportement normal du système...)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...