En travaillant aujourd'hui, il semblait soudain que je ne pouvais plus déboguer notre application. Ce qui est amusant, c’est que si j’utilisais l’application normalement, cela fonctionnerait très bien. Pour clarifier, j’exécutais le débogueur toute la matinée sans incident (mis à part un problème ponctuel ou un crash). Ensuite, après le déjeuner, les échecs ont commencé 100% du temps. Bien sûr, je fais des changements toute la journée, d’où le "il semble" ci-dessus. Alors, voici quelques détails pertinents:
Android Studio 2.1.1 (version du 28 avril 2016)
Cette application démarre avec un écran de connexion. L'utilisateur doit ensuite s'authentifier avec un nom d'utilisateur/mot de passe qui appelle un service externe.
Je peux accéder à l'écran de connexion, mais l'application se bloque toujours au même moment de l'authentification.
Voici la trace de la pile:
05-24 14:56:25.764 2399-2745/com.mycomp.myapp.test E/Crashlytics: Failed to execute task.
Java.lang.InterruptedException
at Java.util.concurrent.FutureTask.awaitDone(FutureTask.Java:375)
at Java.util.concurrent.FutureTask.get(FutureTask.Java:162)
at com.crashlytics.Android.v.a(SourceFile:1936)
at com.crashlytics.Android.v.uncaughtException(SourceFile:307)
at Java.lang.ThreadGroup.uncaughtException(ThreadGroup.Java:693)
at Java.lang.ThreadGroup.uncaughtException(ThreadGroup.Java:690)
05-24 14:56:25.764 2399-2745/com.mycomp.myapp.test E/AndroidRuntime: FATAL EXCEPTION: pool-5-thread-1
Process: com.mycomp.myapp.test, PID: 2399
Java.lang.InterruptedException
at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.Java:1991)
at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2025)
at Java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.Java:410)
at Java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.Java:1035)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1097)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:588)
at Java.lang.Thread.run(Thread.Java:820)
Voici les choses que j'ai essayé de résoudre:
Et jusqu'à présent, rien ne fonctionne. Cependant, je ne saurais trop insister sur le fait que si je lance simplement l'application (bouton de lecture, ^ R) et que je l'exécute sur le même appareil, cela fonctionne parfaitement! Connectez-vous sans problème. Donc, cela ne semble pas être un problème de code.
De plus, si vous regardez la trace de la pile, rien ne pointe notre projet.
Des idées?
Eh bien, je l'ai compris. Il s'avère que j'avais un "Java Field Watchpoint" sélectionné avec "Suspend Thread" comme l'une des options. Voir la capture d'écran ci-jointe pour plus de précisions. À emporter:
Comme vous pouvez le constater, j’utilisais de nombreux points d’arrêt, elle s’est donc enfoncée dans la fenêtre et je ne l’ai pas vue.
Je ne sais toujours pas comment ça s'est passé. J'avais utilisé des montres la veille, mais je les avais toutes supprimées. De plus, je suis presque certain de ne pas l'avoir allumé, donc il est encore mystérieux de ne pas pouvoir fonctionner en milieu de journée. En outre, je n'aurais certainement pas coché "suspendre le fil" de mon propre chef. Une sorte de réglage par défaut?
Le point reste - si vous voyez des traces de pile étranges, il peut être utile de vérifier tous les paramètres des points d'arrêt et.
J'espère que ça aidera quelqu'un.
Instant Run semble être le coupable (du moins dans mon cas avec Android Studio 2.3.3). Au lieu de désactiver les points d'arrêt, essayez de désactiver Instant Run. Une fois que j'ai fait cela, les points d'arrêt ont cessé de causer des accidents.
Voir L'application Android se bloque lorsqu'elle est lancée en mode débogage pour plus de détails. Sous Mac OS X, j'ai désactivé Instant Run en allant dans Android Studio-> Préférences-> Construire, Exécution, Déploiement-> InstantRun et en décochant "Activer Instant Run to hot swap ...".
Il y a un "Vous avez des problèmes avec Instant Run?" message affiché dans le panneau de configuration. J'ai cliqué sur «Réactiver et activer la journalisation supplémentaire», reproduit l'incident, puis immédiatement signalé l'utilisation de l'option «Aide - Signaler un problème instantané ...» à la demande.
Désactiver l'exécution instantanée, ça va résoudre tous les problèmes
J'ai changé d'émulateurs (d'Android 8.1 à Android 7.0) et je n'ai plus vécu cela J'ai perdu 3 heures à ce sujet. J'espère aider quelqu'un en suggérant ceci.