Bonjour,
J'ai fait une application Android MT avec un thread principal qui lance l'activité et affiche la fenêtre avec un bouton Démarrer, un bouton Arrêter et un bouton préférences.
Lors du clic sur le bouton démarrer, le thread principal lance deux autres threads, un qui fait des connexion http/https pour récupérer des infos et un autre qui envoie les coordonnées GPS toutes les 5 minutes.
Mon problème est que les threads HTTP et GPS se coupent au bout d'un moment alors qu'ils sont dans une boucle while(monBooleen) avec monBooleen = true et qui est mis avec la fonction setMonBooleen() à false lorsqu'on appuie sur le bouton Arrêter.
Je sais que mes threads se coupent car j'ai mis un bouton qui s'affiche que si la variable threadGPS est différente de null, ce qui est le cas quand on appuie sur arrêter et pareil pour la variable threadHTTP.
Code du bouton démarrer: lm est un Location manager
code du bouton arrêter :
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 bouttonDemarer.setOnClickListener(new OnClickListener() { public void onClick(View v) { start=true; DELAI_GPS=Integer.parseInt(preferences.getString("GPS", "5"))*60000; locationNEW=null; locationOLD=null; lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, DELAI_GPS,DISTANCE_MIN_GPS, onLocationChange); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, DELAI_GPS,DISTANCE_MIN_GPS,onLocationChange); if(threadHTTP!=null){threadHTTP.start();} else{threadHTTP= new monThreadHTTP(); threadHTTP.start();} if(threadGPS !=null){threadGPS .start();} else{threadGPS = new monThreadGPS(); threadGPS.start();} } } });
et les code des deux threads sont sur le même principe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 bouttonArreter.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(threadHTTP!=null){threadHTTP.setRunning(false);threadHTTP=null;} if(threadGPS !=null){threadGPS .setRunning(false);threadGPS =null;} } });
J'ai fait plusieurs tests avec le même téléphone :
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
17 private class monThreadGPS extends Thread implements Runnable{ private Boolean isRunning=false; public void run(){ isRunning=true; while(isRunning){ //TRAITEMENT sleep(DELAI); //DELAI = 5 minutes } catch (IOException e) { e.printStackTrace(); } } } //Méthode pour arrêter le THREAD public void setRunning(boolean isRunning){ this.isRunning=isRunning; }
Si je reste sur place avec le téléphone connecté à Eclipse je n'ai pas encore eu ce problème.
Si je mets le téléphone dans une voiture et que je le suis "à la trace" par moment ça fonctionne très bien mais je ne sais pas pourquoi, il arrive que les threads se coupent, comme expliqué plus haut.
Merci de votre aide
Partager