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

Les erreurs ANR (Application Not Responding) 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 Crashlytics tableau de bord, nous balisons les threads applicables pour vous fournir des conseils sur la façon de déboguer l'erreur ANR.

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

Triggered ANR

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

Le thread problématique peut être le thread principal de l'application ou tout thread jugé non réactif. Toutefois, le thread balisé comme Triggered ANR peut être ou non la cause réelle de l'erreur ANR. Pour fournir des informations permettant de déboguer et de corriger ces erreurs ANR, Crashlytics balise également tous les autres threads impliqués dans l'erreur ANR. Dans les sections suivantes de cette page, découvrez les autres tags qui peuvent être appliqués à un thread.

Deadlocked

Tous les threads impliqués dans un interblocage qui a entraîné l'erreur ANR sont annotés avec le tag 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/verrous acquis par ces threads. Pour connaître les solutions possibles, consultez Interblocage et algorithmes de prévention des interblocages.

IO Root blocking

Tout thread qui exécutait des opérations d'E/S lentes et bloquait le Triggered ANR thread est annoté avec le IO Root blocking tag. Si le Triggered ANR thread n'est pas bloqué par d'autres threads, alors le IO Root blocking thread est également un Root blocking thread.

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 balisé comme Triggered ANR est annoté avec le Root blocking tag. Si un thread est balisé à la fois comme Root blocking et Triggered ANR, cela signifie qu'aucun autre thread ne bloque ce thread.

Si des Triggered ANR threads étaient en attente (peut-être de manière transitive) d'autres threads, ils sont Root blocking. Un thread peut être à l'origine de l'erreur ANR pour différentes raisons.

Recommandation

Réduisez le travail qui sollicite fortement le processeur dans le thread principal. Utilisez des threads de travail ou d'arrière-plan pour effectuer des tâches qui sollicitent fortement le processeur.

Réduisez le travail qui sollicite fortement les E/S, comme le chargement à partir d'une base de données, sur le thread principal.

Unknown root cause

Un thread est balisé avec le Unknown root cause tag si il s'agit du thread qui a déclenché l'erreur ANR, mais qu'il était inactif dans le processus lorsque l' erreur ANR s'est produite. Crashlytics ne dispose pas de suffisamment d'informations pour déterminer la cause première. Il n'y a aucune raison évidente pour laquelle cette erreur ANR s'est produite.

Recommandation

Suivez les conseils généraux sur la façon d'é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.