Bonjour à toutes et à tous,
Je code une application GPS se servant d'un GPS blueTooth externe. Tout fonctionne très bien, sauf que mon appli me vide la batterie à la vitesse grand V (j'ai réussi à coincer un ampèremètre entre la batterie et le smartphone pour le vérifier).
J'y ai mis du temps, mais j'ai réussi à voir d'où vient le problème. Le thread qui lit les informations en provenance du GPS tourne en permanence : boucle while(true). Avec un petit compteur (tc), j'ai pu vérifier que cette boucle est parcourue environ 80000 fois par seconde ... une à deux fois me suffisent.
Comment résoudre ce problème ? A mon sens, il faudrait lancer ce thread quelques fois par secondes, mais comment ?
Je suppose que vous avez des idées.
Merci de votre aide.
Pierre
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
18
19
20
21
22
23
24
25
26
27
28
29
30 private class ReceiverThread extends Thread { Handler handler; ReceiverThread(Handler h) { handler = h; } @Override public void run() { while(true) { tc = tc+1; try { if(receiveStream.available() > 0) { byte buffer[] = new byte[100]; int k = receiveStream.read(buffer, 0, 100); if(k > 0) { byte rawdata[] = new byte[k]; for(int i=0;i<k;i++) rawdata[i] = buffer[i]; String data = new String(rawdata); Message msg = handler.obtainMessage(); Bundle b = new Bundle(); b.putString("receivedData", data); msg.setData(b); handler.sendMessage(msg); } } } catch (IOException e) { e.printStackTrace(); } } } }
Partager