Comme quoi... un logcat entier... ca aide
Comme l'a déjà dit Hizin, tout le problème est dans le "while (!go)"...
Bon.. imaginons la situation suivante:
1) "Pierre" répond très régulièrement au téléphone. Il n'a pas le droit de laisser sonner longtemps ou de ne pas répondre (sinon il va en prison ^^), ni même de laisser la ligne occupée (sinon personne ne peut plus l'appeler).
2) "Pierre" a besoin de pain... et il n'y en a pas... Il ne peut pas non plus aller lui-même à la boulangerie (sinon prison !)
3) Il demande alors à "Jean" d'aller acheter du pain à sa place.
4) Pendant ce temps, il peut continuer de répondre aux appels.
5) Quand "Jean" revient, il doit dire à "Pierre", tiens c'est bon j'ai le pain... Mais il ne peut pas le faire directement ("Pierre" est peut-être au téléphone)...Coup de chance, "Jean" a directement accès à la boite vocale de "Pierre", et va donc lui laisser un message "va manger le pain". Message que "Pierre" aura dès qu'il sera libre (peut être immédiatement ?).
6) Pierre mange le pain.
Repassons côté android:
1) "Pierre" c'est le thread UI... les appels téléphoniques: les évènements UI (back, click, ...), la prison, c'est l'ANR (Application Not Responding) ou le crash.
2) Le pain, c'est le GPS...
3) "Jean" c'est le thread à part.
4) c'est ici que tu as collé un "while (!go) ;"... si c'était pour attendre Jean sans rien faire d'autre, il était plus rapide d'aller soi-même à la boulangerie ! non ? En plus, pendant ce temps là, il répond pas au téléphone => Prison !
Non simplement on quitte la fonction onCreate() et continue de répondre aux events.
5) La boite vocale c'est le système de Handler....
6) Le code qui utilise ce qui est récupéré par le thread.
Il y a au moins 3 manières de réaliser le (5):
En utilisant justement un Handler: c'est à mon gout peu pratique, compliqué..
En utilisant "runOnUIThread" de Pierre: c'est le moyen le plus simple de laisser du code à executer par l'UI-thread.
Sinon, en remplaçant tout le "thread" par un AsyncTask (qui va gérer les threads justement, les cancels, les communications asynchrones).
J'espère avoir été clair
Reste à espérer que manger le pain n'est pas trop long ^^
Partager