Pierre87 Posté(e) 17 février 2010 Share Posté(e) 17 février 2010 Comment détecter quand mon appplication n'es plus active/visible ? Je ne parle pas de l'état individuel de chaque Activity, mais bien de l'application en général. J'ai cherché, mais je n'ai rien vu à ce niveau là :/ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 17 février 2010 Share Posté(e) 17 février 2010 bah la detection etant une activité tu ne sera jamais inactif . Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
xma Posté(e) 17 février 2010 Share Posté(e) 17 février 2010 Comment détecter quand mon appplication n'es plus active/visible ?Je ne parle pas de l'état individuel de chaque Activity, mais bien de l'application en général. J'ai cherché, mais je n'ai rien vu à ce niveau là :/ Je ne pense pas que ce soit facile mais explique nous exactement ce que tu cherches à faire. Si tu veux t'assurer que ton application ne soit lancée que si elle ne l'est pas, il faut utiliser un flag dans ton startActivity() (plus le nom en tête cependant). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 17 février 2010 Auteur Share Posté(e) 17 février 2010 Ok, c'est pour mon application PRemoteDroid (controle de PC à distance, voir ma signature) Voilà à quoi ressemblait son architecture avant : - Une Activity (ControlActivity), qui se lance automatiquement au démarrage - D'autres Activity (l'aide ou les paramètres par exemple) qui se lancent depuis ControlActivity. - ControlActivity possède un objet qui gère la connexion (de type TCP) avec le serveur - L'état de la connexion est géré par l'état de ControlActivity (onResume, on ouvre une connexion, onPause on la ferme). - Les autres Activity ne font pas du tout appel à la connexion Ca marchait plutôt bien jusque là, j'étais sûr d'avoir une connexion "à jour" à chaque fois que j'affiche ControlActivity. Problèmes : - On bascule l'écran en mode paysage, on reset la connexion - Quand on passe d'une Activity à une autre, ça reset aussi la connexion (alors que ce n'est pas toujours nécessaire) - Si je veux rajouter d'autres Activity qui font appel à la connexion, ça ne marche pas :/ La solution que j'ai trouvé : - J'exploite la classe Application, en paramétrant mon fichier manisfest. - Mon objet Application s'occupe maintenant de la connexion réseau (aussi bien de l'émission que de la réception) - Une bonne partie de mes Activity et View connaissent mon objet Application, pour ENVOYER des données (clic ou déplacement de souris pour le moment) Mais ça me pose d'autres problèmes : - Je ne sais pas à quel moment dire "je démarre/coupe/reset ma connexion" - Quand mon application reçoit un message particulier, elle a besoin de le transmettre à une View de ControlActivity, et là c'est le drame... J'ai vraiment l'impression que : - Il est facile pour une Activity ou une View d'accéder à Application - Il est très difficile de faire communiquer Application avec le reste de mon programme - Je suis dans le caca J'espère avoir été assez clair :/ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 17 février 2010 Auteur Share Posté(e) 17 février 2010 Est ce que ce serait une bonne idée d'utiliser le système de Broadcast pour faire communiquer mon Application avec mes Activity ? J'ai cherché un peu, mais j'ai du mal à voir comme faire pour envoyer des objet par broadcast ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 17 février 2010 Share Posté(e) 17 février 2010 design pattern oberver ^^ + codage de porc. en gros tu fais une interface genre public interface Bidule{ void faitUnTruc(); } ton activity tu lui rajoute implements Bidule. Sur l'application tu rajoute une grosse liste statique private static List mMaListePourrie = new ArrayList(); et une méthode statique: public static void registerBidule(Bidule bide){ mMaListePourrie.add(bide); } et ta controlview truc à sa création tu lui fait faire: Application.registerBidule(this); du coup quand ton applicatin eçoit son évènement elle a juste à faire: foreach(Bidule bibi : mMaListePourrie){ bibi.faitUnTruc(); } avec des paramètres s'il le faut : chaque activity enregistrée sera au courant de l'évènement. pour la connection idem : un gros boolean static que tu modifie depuis tes Activity si necessaire. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 17 février 2010 Auteur Share Posté(e) 17 février 2010 ok je vais regarder de ce côté là ! ça pourrait même me résoudre mon problème de savoir quand couper ma connexion : quand il n'y a rien de register, ça ne sert à rien d'avoir une connexion établie Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 17 février 2010 Share Posté(e) 17 février 2010 Argh... J'allais répondre la meme chose, mais on m'a appelé pour le boulot (c 'est penible ces gens qui veulent que je bosse quand je suis au travail )... Sinon, je ne suis pas sur de voir l'interet d'avoir une liste à gérer : tu ne veux envoyer ton message réseau qu'à l'activité à l'écran, non ? Dans ce cas là, tu la register sur le OnCreate / On resume (?), et tu la déregister sur le onpause, comme tu faisais avant... Mais sur le principe c'est bien ca : à l'entrée de ton activity, tu signales à l'application 'Yep, moi je veux des messages', et l'application peut ensuite lui envoyer quand il faut... Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 17 février 2010 Auteur Share Posté(e) 17 février 2010 C'est vrai que vu comme ça ... Ca me parait aussi logique ! Tout dépend de si je veux que plusieurs Activity puissent recevoir les messages en même temps ... Mais bon, je bloque toujours sur la manière de gérer ma connexion TCP ! C'est très difficile d'exprimer les conditions qui déterminent si je dois établir ou couper la connexion :/ (et la réinitialiser aussi) Le plus simplement, ça serait : - Quand une Activity de mon application est visible, j'établis la connexion - Quand aucune Activity de mon application n'est visible, je coupe la connexion Si je me sers du fait qu'une Activity est "register" pour recevoir des messages, ça peut marcher : Le onStart de l'Activity suivante est exécuté avant le onStop de l'Activity quittée Mais il faut donc que je garde une liste d'Activity "register" Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 28 février 2010 Auteur Share Posté(e) 28 février 2010 J'ai implémenté ça dans mon appli, et c'est pas mal : http://code.google.com/p/premotedroid/source/browse/trunk/PRemoteDroid%20Client/src/org/pierre/remotedroid/client/app/PRemoteDroid.java Voilà comment ça fonctionne : - Quand une Activity s'ouvre, elle s'enregistre auprès de mon Application - Quand une Activity se ferme, elle se supprime de mon Application Et pour établir la connexion - Si on enregistre une Activity, et qu'il n'y a pas de connexion : on établi une connexion - Si on supprime une Activity, et qu'il n'y en a plus d'autre, on PLANIFIE la fermeture de la connexion Quand on planifie cette fermeture, on attend un certain temps, et si à la fin il n'y a pas d'Activity enregistrée, on ferme la connexion 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.