Déboguer votre application Android en fonction de balises ANR dans le tableau de bord Crashlytics

Les erreurs ANR (l'application ne répond pas) se déclenchent lorsque le thread UI de l'application ne répond pas pendant plus de cinq secondes. Pour en savoir plus sur les erreurs ANR et leur diagnostic, consultez la documentation Android.

De plus, Crashlytics peut vous aider à identifier des threads problématiques spécifiques. Nous analysons les erreurs ANR, puis, dans le tableau de bord Crashlytics, nous taguons les threads applicables pour fournir des conseils sur le débogage de l'erreur ANR.

Les sections suivantes de cette page expliquent la signification de chaque balise ANR, présentent un exemple d'erreur ANR avec cette balise et fournissent une solution recommandée pour déboguer l'erreur ANR.

Triggered ANR

Un thread qui a été bloqué trop longtemps et a déclenché l'erreur ANR est annoté avec cette balise Triggered ANR.

Le thread problématique peut être le thread principal de l'application ou tout thread qui ne répond pas. Cependant, le thread tagué Triggered ANR peut être ou non la cause réelle de l'erreur ANR. Pour fournir des insights sur le débogage et la résolution de ces erreurs ANR, Crashlytics tague également tous les autres threads impliqués dans l'erreur 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 interblocage ayant entraîné l'erreur ANR sont annotés avec cette balise Deadlocked.

Un interblocage se produit lorsqu'un thread passe à l'é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, il est probable que des erreurs ANR se produisent.

Recommandation

Examinez les threads impliqués dans l'interblocage et vérifiez les ressources/verrouillages acquis par ces threads. Pour connaître les solutions possibles, consultez les articles sur l'interblocage et les algorithmes de prévention des interblocages.

IO Root blocking

Tout thread qui exécutait des opérations d'E/S lentes et qui bloquait le thread Triggered ANR est annoté avec la balise IO Root blocking. Si le thread Triggered ANR n'est pas bloqué par d'autres threads, le thread IO Root blocking est également un thread Root 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. Si le thread principal est IO Root blocking, vous pouvez également utiliser le mode strict pour identifier les opérations d'E/S involontaires qui se produisent sur le thread principal.

Root blocking

Tout thread qui a bloqué le thread tagué comme Triggered ANR est annoté avec la balise Root blocking. Si un thread porte les tags Root blocking et Triggered ANR, cela signifie qu'aucun autre thread ne le bloque.

Si des threads Triggered ANR attendaient (peut-être de manière transitive) d'autres threads, ils sont Root blocking. Un thread peut être à l'origine d'une erreur ANR pour diverses raisons.

Recommandation

Minimisez les tâches qui sollicitent beaucoup le processeur dans le thread principal. Utilisez des threads de travail ou d'arrière-plan pour effectuer des tâches gourmandes en ressources de processeur.

Réduisez les tâches intensives en E/S, comme le chargement à partir d'une base de données, sur le thread principal.

Unknown root cause

Un thread est tagué avec la balise Unknown root cause s'il s'agit du thread qui a déclenché l'erreur ANR, mais qui était inactif dans le processus lorsque l'erreur ANR s'est produite. Crashlytics ne dispose pas d'informations suffisantes pour déterminer la cause racine. Il n'y a aucune raison évidente pour laquelle cette ANR s'est produite.

Recommandation

Suivez les conseils généraux pour éviter les erreurs ANR. Par exemple, identifiez les emplacements de votre code où le thread principal de l'application peut être occupé pendant plus de cinq secondes.