-
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 ^^
-
Merci. Je regarde aujourd'hui ou demain et je vous tiens au courant de l'avancé ;-)
-
J’ai enfin réussi à faire fonctionner mon application sur le htc one s (Et bonne nouvelle ca marche aussi sur les autres téléphones).
La solution, est que j’ai du abuser des « new thread ». Je faisais appel à mon activité dans une activité « loading » via un new thread. Donc j’ai supprimé dans l’activité présente sur ce topic le « new thread » ainsi que la boucle dans le vide « while (!go) ».
Peut être n’est ce pas la meilleur solution mais en tout cas ça marche.
Voila.
Encore merci à ceux qui m’ont apportés leur lumière