Les erreurs d'application ne répondant pas (ANR) sont déclenchées lorsque le thread d'interface utilisateur de l'application ne répond pas pendant plus de
De plus, Crashlytics peut aider à identifier des fils de discussion problématiques spécifiques. Nous analysons les ANR, puis, dans le tableau de bord Crashlytics , nous marquons les threads applicables pour fournir des conseils sur la façon de déboguer l'ANR.
Les sections suivantes de cette page expliquent la signification de chaque balise ANR, montrent un exemple d'ANR avec cette balise et fournissent une solution recommandée pour déboguer l'ANR.
Triggered ANR
Un thread qui a été bloqué trop longtemps et qui a déclenché l'ANR est annoté avec ceciTriggered ANR
.
Le fil problématique peut être le fil principal de l’application ou tout fil qui ne répond pas. Cependant, le fil étiqueté commeTriggered ANR
peut ou non être la cause réelle de l'ANR. Pour fournir des informations sur le débogage et la correction de ces ANR, Crashlytics marque également tous les autres threads impliqués dans l'ANR. Dans les sections suivantes de cette page, découvrez les autres balises pouvant être appliquées à un fil de discussion.
Deadlocked
Tous les threads impliqués dans un blocage ayant conduit à l'ANR sont annotés avec ceciDeadlocked
.
Un blocage se produit lorsqu'un thread entre dans un état d'attente car une ressource requise est détenue par un autre thread, qui attend également une ressource détenue par le premier thread. Si le thread principal de l'application se trouve dans cette situation, des ANR sont susceptibles de se produire.
Recommandation
Examinez les threads impliqués dans le blocage et vérifiez les ressources/verrous acquis par ces threads. Reportez-vous aux algorithmes de prévention des blocages et des blocages pour connaître les solutions possibles.
IO Root blocking
Tout thread qui exécutait des opérations d'E/S lentes et bloquait leTriggered ANR
est annoté avec leIO Root blocking
. Si laTriggered ANR
n'est pas bloqué par d'autres threads, alors leIO Root blocking
est également unRoot blocking
.
Recommandation
En général, votre application ne doit pas exécuter d’opérations d’E/S coûteuses sur le thread principal. Dans le cas où le fil principal estIO Root blocking
, vous pouvez également utiliser le mode strict pour identifier toutes les opérations d'E/S involontaires qui se produisent sur le thread principal.
Root blocking
Tout fil de discussion qui a bloqué le fil marqué commeTriggered ANR
est annoté avec leRoot blocking
. Si un fil de discussion est étiqueté comme étant les deuxRoot blocking
etTriggered ANR
, alors aucun autre thread ne bloque ce thread.
Si seulementTriggered ANR
attendaient (peut-être de manière transitive) d'autres threads, ils sontRoot blocking
. Il peut y avoir diverses raisons pour lesquelles un thread est à l'origine de l'ANR.
Recommandation
Minimisez le travail gourmand en CPU dans le thread principal. Utilisez des threads de travail ou d’arrière-plan pour effectuer des tâches gourmandes en CPU.
Minimisez le travail gourmand en E/S, comme le chargement à partir d’une base de données, sur le thread principal.
Unknown root cause
Un fil de discussion est étiqueté avec leUnknown root cause
si c'est le thread qui a déclenché l'ANR mais qui était inactif dans le processus lorsque l'ANR s'est produit. Crashlytics ne dispose pas de suffisamment d'informations pour déterminer la cause première. Il n’y a aucune raison évidente pour laquelle cet ANR s’est produit.
Recommandation
Suivez les conseils généraux sur la façon de prévenir les ANR. Par exemple, identifiez les endroits de votre code où le thread principal de l'application peut être occupé pendant plus de