Debuggen Sie Ihre Android-App basierend auf ANR-Tags im Crashlytics-Dashboard

ANR-Fehler (Application Not Responding) werden ausgelöst, wenn der UI-Thread der Anwendung länger als 5 Sekunden nicht antwortet. Weitere Informationen zu ANRs und der Diagnose von ANRs finden Sie in der Android-Dokumentation .

Darüber hinaus kann Crashlytics dabei helfen, bestimmte problematische Threads zu lokalisieren. Wir analysieren ANRs und markieren dann im Crashlytics-Dashboard entsprechende Threads, um Hinweise zum Debuggen des ANR bereitzustellen.

In den folgenden Abschnitten auf dieser Seite wird erläutert, was jedes ANR-Tag bedeutet, ein Beispiel-ANR mit diesem Tag gezeigt und eine empfohlene Lösung zum Debuggen des ANR bereitgestellt.

Triggered ANR

Ein Thread, der zu lange blockiert war und die ANR ausgelöst hat, wird damit gekennzeichnet Triggered ANR -Tag.

Der problematische Thread kann der Hauptthread der App oder ein beliebiger Thread sein, der nicht reagiert. Der Thread wurde jedoch mit dem Tag versehen Triggered ANR kann die tatsächliche Ursache der ANR sein oder auch nicht. Um Erkenntnisse zum Debuggen und Beheben dieser ANRs bereitzustellen, markiert Crashlytics auch alle anderen Threads, die an der ANR beteiligt sind. In den folgenden Abschnitten dieser Seite erfahren Sie mehr über die anderen Tags, die auf einen Thread angewendet werden können.

Deadlocked

Alle Threads, bei denen festgestellt wird, dass sie in einen Deadlock verwickelt sind, der zum ANR geführt hat, werden damit vermerkt Tag Deadlocked .

Ein Deadlock tritt auf, wenn ein Thread in den Wartezustand wechselt, weil eine erforderliche Ressource von einem anderen Thread gehalten wird, der ebenfalls auf eine vom ersten Thread gehaltene Ressource wartet. Wenn sich der Hauptthread der App in dieser Situation befindet, ist es wahrscheinlich, dass ANRs auftreten.

Empfehlung

Schauen Sie sich die am Deadlock beteiligten Threads an und überprüfen Sie die von diesen Threads erworbenen Ressourcen/Sperren. Mögliche Lösungen finden Sie unter Deadlock- und Deadlock-Verhinderungsalgorithmen .

IO Root blocking

Jeder Thread, der langsame E/A-Vorgänge ausführte und blockierte Der Triggered ANR Thread wird mit dem kommentiert IO Root blocking . Wenn die Der Triggered ANR Thread wird nicht von anderen Threads blockiert IO Root blocking ist auch ein Root blocking .

Empfehlung

Im Allgemeinen sollte Ihre App keine teuren E/A-Vorgänge im Hauptthread ausführen. Im Fall des Hauptthreads IO Root blocking können Sie den strikten Modus auch verwenden, um alle unbeabsichtigten E/A-Vorgänge zu identifizieren, die im Hauptthread stattfinden.

Root blocking

Jeder Thread, der den als markierten Thread blockiert hat Triggered ANR wird mit dem gekennzeichnet Root blocking -Tag. Wenn ein Thread als beides markiert ist Root blocking und Triggered ANR , dann gibt es keine anderen Threads, die diesen Thread blockieren.

Wenn überhaupt Triggered ANR Threads warteten (möglicherweise transitiv) auf andere Threads, das sind sie Root blocking . Es kann verschiedene Gründe geben, warum ein Thread eine Hauptursache für die ANR ist.

Empfehlung

Minimieren Sie die CPU-intensive Arbeit im Hauptthread. Verwenden Sie Arbeits- oder Hintergrundthreads zum Ausführen CPU-intensiver Aufgaben.

Minimieren Sie E/A-intensive Arbeit, wie das Laden aus einer Datenbank, im Hauptthread.

Unknown root cause

Ein Thread ist mit dem markiert Unknown root cause Tag, wenn es der Thread war, der die ANR ausgelöst hat, aber im Prozess inaktiv war, als die ANR auftrat. Crashlytics verfügt nicht über ausreichende Informationen, um die Grundursache zu ermitteln. Es gibt keinen ersichtlichen Grund, warum diese ANR aufgetreten ist.

Empfehlung

Befolgen Sie die allgemeinen Ratschläge zur Vorbeugung von ANRs. Identifizieren Sie beispielsweise die Stellen in Ihrem Code, an denen der Hauptthread der App länger als 5 Sekunden beschäftigt sein kann.