Déboguez votre application Android basée sur les balises ANR dans le tableau de bord Crashlytics

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 5 secondes . Vous pouvez en savoir plus sur les ANR et le diagnostic des ANR dans la documentation Android .

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 ceci Triggered 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é comme Triggered 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 ceci Deadlocked .

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 le Le thread Triggered ANR est annoté avec le Balise IO Root blocking . Si la Le thread Triggered ANR n'est pas bloqué par d'autres threads, alors le Le thread IO Root blocking est également un Fil 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. Dans le cas où le fil principal est IO 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é comme Triggered ANR est annoté avec le Balise Root blocking . Si un fil de discussion est étiqueté comme étant les deux Root blocking et Triggered ANR , alors aucun autre thread ne bloque ce thread.

Si seulement Les threads Triggered ANR attendaient (peut-être de manière transitive) d'autres threads, ils sont Root 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 le Unknown 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 5 secondes .