IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Thread dans un service qui s'arrête


Sujet :

Android

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut Thread dans un service qui s'arrête
    Bonjour,

    Je suis en train de faire une application qui doit renvoyer des informations à un serveur régulièrement. J'ai donc fait un service qui lance un thread. Ce thread se charge d'ouvrir la connexion puis d'envoyer les informations régulièrement.

    Je dispose d'une Activity qui permet de visualiser les traces avec un horodatage.

    code simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Mythread extends Thread
    {
        public void run()
        {
             // Ouverture de la connexion
     
     
             // Envoi d'infos régulièrement
             while (true)
             {
                  trace("avant envoiInfos");
                  envoiInfos();
                  sleep(15000);
             }
        }
    }
    Tout ca marche parfaitement, mais une fois qu'on est sur un vrai téléphone, au bout de quelques dizaines de secondes que l'écran s'est éteint, on reste bloqué dans le sleep

    exemple de traces :
    11:08:00 | avant envoiInfos
    11:08:15 | avant envoiInfos
    11:08:30 | avant envoiInfos << extinction de l'écran
    11:08:46 | avant envoiInfos
    11:09:01 | avant envoiInfos
    11:09:15 | avant envoiInfos
    11:18:23 | avant envoiInfos << rallumage de l'écran, on est resté 9 minutes sans trace
    11:18:38 | avant envoiInfos
    ...
    Quelqu'un aurait-il une idée du pourquoi du comment ?
    Pour info, j'utilise des Threads parceque j'ai potentiellement pas mal de connexions à gérer. De plus ce code est dans une librairie qui sera aussi bien utilisée dans une appli java ordinaire que dans une appli android


    Merci pour vos tuyaux !

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Pour info, j'ai tenté de faire les envois d'info via un handler et ca ne marche pas mieux que le thread : c'est vraiment toute l'appli qui se fait mettre en pause

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben oui... c'est un peu le but de la mise en veille.... sinon, autant juste éteindre l'écran....

    Première remarque: Sleep()... on ne fait jamais de sleep() dans un thread, sauf cas très particuliers... et dans tous les cas on devrait alors avoir (je suis étonné d'ailleurs que le code que tu as posté compile):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void run()
    {
         boolean stopped = false;
         while (stopped) {
              try {
                  ...
                  sleep(...);
              } catch (InterruptedException ex) {
                  stopped =  true;
              }
         }
    }
    J'espère qu'il n'y a pas de traitement réseau dans l'opération toutes les 15s, parce que sinon, c'est 5h de durée de vie pour la batterie...
    C'est pour cette raison qu'on répète ici régulièrement qu'on ne programme pas pour mobile de la même façon que pour un serveur (sensé tourner 24/24).....

    Pour éviter le sleep, on passe par des évènements (de synchronisation ou système), je pense en particulier au AlarmManager, qui, au passage, est capable de "réveiller" le téléphone régulièrement (pas plus d'une fois toutes les 15 minutes il me semble)...
    Au passage, l'utilisation d’évènements permet de ne plus avoir de Thread... Libre à l'implémentation "application classique" d'utiliser un Thread pour envoyer les évènements en question...

    Il y a aussi le Wake_lock... pour garder le téléphone allumé....
    http://developer.android.com/referen....WakeLock.html

    Enfin bref... dans tous les cas, un truc qui tourne et fait une action toutes les 15s est une très mauvaise idée sur téléphone... si en plus elle fait du réseau, ca veut dire que la partie "network" ne s'éteint jamais... Battery / CPU Hogger....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Pour ce qui est du InterruptedException, je l'ai volontairement omis dans mon petit bout de code simplifié.

    Pour le reste, j'ai besoin de transférer mes informations sur le réseau très régulièrement, donc consommateur ou pas, j'en ai besoin.
    Je vais jeter un oeil à l'AlarmManager, d'après la doc on peut lui mettre le timing souhaité.

    Merci

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Toutes les 15s me semble exagéré.... Pour info, 15s c'est le temps que met à s'ouvrir la première connexion http à la sortie de veille en ce qui me concerne....
    (recherche WiFi, négociation 3G, obtention IP, ...).

    Et justement quand on parle d'un portable, il me semble qu'il y a un problême de conception... Peut on connaitre un peu plus de détails sur le but (même générique) ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Il s'agit d'une application expérimentale qui va être déployée sur plusieurs terminaux et qui doit envoyer l'état de capteurs de nos valeureux cobayes à un serveur et échanger avec les autres terminaux de l'expérience. Tout ca se passe sur un wifi local avec une connexion socket permanente. Du coup ben l'autonomie n'est franchement pas notre priorité, tant qu'on arrive a tenir une paire d'heures, on sera contents et puis on apportera nos chargeurs au boulot pour ne pas tomber en panne ;-)

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Bon... ben WAKE_LOCK est ton ami alors
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Je viens d'en lire la doc. Je pensais que le wake lock empêchait la mise en veille de l'écran également. a priori il y a un mode moins sauvage donc ca devrait convenir !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème arrêt de certains thread dans une application
    Par adteulade dans le forum Android
    Réponses: 7
    Dernier message: 24/04/2012, 10h22
  2. Thread qui s'arrête prématurément !
    Par djiga4me dans le forum Langage
    Réponses: 5
    Dernier message: 01/10/2010, 17h43
  3. Réponses: 1
    Dernier message: 28/07/2009, 18h13
  4. service qui démare puis s'arrête
    Par amirad dans le forum Windows Forms
    Réponses: 0
    Dernier message: 16/04/2009, 17h44
  5. [MySQL] Script php avec insertion dans base de données qui s'arrête tout seul
    Par tofito dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/12/2008, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo