kuroro Posté(e) 18 février 2011 Share Posté(e) 18 février 2011 Salut a tous, Je suis en train de développer une application qui nécessite qu'une connexion bluetooth persistante. En fait j'ai plusieurs activités qui partagent la même connexion, j'ai donc fais un service qui maintient la connexion, et chacune des activités fait appel au service. Le problème, du coup c'est que si l'utilisateur passe a une autre application, mon service tourne toujours en fond =>conso batterie/bluetooth occupé. Le truc c'est que j'arrive pas a faire la différence entre le passage d'une de mes activités a une autre de mes activité (donc connexion persistante) , ou si c'est l'utilisateur qui est passé a une autre activité (genre bouton home/ bouton retour ect ) Du coup j'aimerais faire un bouton quit qui va kill mon application. Si vous avez une idée je suis preneur :P Lien vers le commentaire Partager sur d’autres sites More sharing options...
eephyne Posté(e) 19 février 2011 Share Posté(e) 19 février 2011 le OnPause() est là pour ça , il se declenchera lorsque ton app passe en background Lien vers le commentaire Partager sur d’autres sites More sharing options...
kuroro Posté(e) 20 février 2011 Auteur Share Posté(e) 20 février 2011 le OnPause() est là pour ça , il se declenchera lorsque ton app passe en background Le onPause est appelé des que mon activité passe en bg (et donc quand je passe d'une activité a une autre de MON application, le onPause est quand même appelé) du coup je ne peut pas faire la différence entre un onPause causé par un de mes boutons, et le onPause causé par l'utilisateur. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 20 février 2011 Share Posté(e) 20 février 2011 Salut! J'ai eu le même problème récemment, mais avec le GPS (je voulais activer le GPS lorsque l'application était lancée). La solution est tout simple: il faut savoir quand un écran de l'appli est visible :P La solution: Avoir un compteur "static" qui indique le nombre d'écrans "ouverts" Dans un onResume(): - tu l'incrémentes - si il valait 0 avant, tu ouvres ta connexion Dans un onPause: - tu décrémentes - si il vaut 0, tu coupes ta connexions Le soucis, c'est que les onResume() et onPause() ne se chevauchent pas. Donc le service est coupé à chaque changement d'écran (c'est con hein) Il faut donc utiliser onStart/onStop à la place de onResume/onPause Mais il y a un inconvénient: le onStop est parfois appelé quelques secondes après le changement d'écran. Ce qui fait que le service n'est pas coupé IMMEDIATEMENT après que l'application ai été mise en "pause"/quittée. Mais ce n'est pas hyper grave... Un autre conseil: une appli qui a un bouton "quitter" est une appli mal conçue :P PS: pour ne pas avoir a écrire le code plusieurs fois, tu peux factoriser dans une Activity "parente" Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 20 février 2011 Share Posté(e) 20 février 2011 La solution du compteur, dans le Service, du nombre d'écrans ouverts, est effectivement la bonne. Et pour éviter de fermer la connexion entre 2 changements d'écran de ton appli, lorsque ce compteur passe temporairement à 0, il suffit de lancer dans ton Service un AsyncTask par ex. qui va se mettre en attente pendant quelques secondes, et si à l'issue de cette attente, le compteur est toujours à 0 parce qu'il n'y aura pas eu de onResume sur une de tes Activity (basculement vers une autre appli), alors, à ce moment là, tu peux fermer la connexion Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.