Fehler in Android-App anhand von ANR-Tags im Crashlytics-Dashboard beheben

ANR-Fehler (App antwortet nicht) werden ausgelöst, wenn der UI-Thread der App länger als 5 Sekunden nicht reagiert. Weitere Informationen zu ANR-Fehlern und ihrer Diagnose finden Sie in der Android-Dokumentation.

Außerdem kann Crashlytics dabei helfen, bestimmte problematische Threads zu identifizieren. Wir analysieren ANR-Fehler und kennzeichnen dann im Crashlytics-Dashboard die entsprechenden Threads, um Hinweise zur Fehlerbehebung zu geben.

In den folgenden Abschnitten auf dieser Seite wird erläutert, was die einzelnen ANR-Tags bedeuten. Außerdem wird ein Beispiel-ANR mit dem jeweiligen Tag gezeigt und eine empfohlene Lösung zum Debuggen des ANR angegeben.

Triggered ANR

Ein Thread, der zu lange blockiert wurde und den ANR-Fehler ausgelöst hat, wird mit dem Tag Triggered ANR gekennzeichnet.

Der problematische Thread kann der Hauptthread der App oder ein beliebiger Thread sein, der nicht reagiert. Der Thread mit dem Tag Triggered ANR ist jedoch möglicherweise nicht die tatsächliche Ursache des ANR-Fehlers. Um Informationen zum Beheben dieser ANR-Fehler bereitzustellen, kennzeichnet Crashlytics auch alle anderen Threads, die an dem ANR-Fehler 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, die an einem Deadlock beteiligt waren, der zum ANR-Fehler geführt hat, werden mit diesem Deadlocked-Tag versehen.

Ein Deadlock tritt auf, wenn ein Thread in den Wartestatus wechselt, weil eine erforderliche Ressource von einem anderen Thread gehalten wird, der ebenfalls auf eine Ressource wartet, die vom ersten Thread gehalten wird. Wenn sich der Hauptthread der App in dieser Situation befindet, treten wahrscheinlich ANR-Fehler auf.

Empfehlung

Sehen Sie sich die Threads an, die am Deadlock beteiligt sind, und prüfen Sie die von diesen Threads abgerufenen Ressourcen/Sperren. Mögliche Lösungen finden Sie unter Deadlock und Deadlock-Vermeidungsalgorithmen.

IO Root blocking

Alle Threads, die langsame E/A-Vorgänge ausgeführt und den Triggered ANR-Thread blockiert haben, sind mit dem Tag IO Root blocking gekennzeichnet. Wenn der Thread Triggered ANR nicht von anderen Threads blockiert wird, ist der Thread IO Root blocking auch ein Thread Root blocking.

Empfehlung

Im Allgemeinen sollten in Ihrer App keine rechenintensiven E/A-Vorgänge im Hauptthread ausgeführt werden. Wenn der Hauptthread IO Root blocking ist, können Sie auch den Strict Mode verwenden, um unbeabsichtigte E/A-Vorgänge zu erkennen, die im Hauptthread ausgeführt werden.

Root blocking

Jeder Thread, der den Thread mit dem Tag Triggered ANR blockiert hat, wird mit dem Tag Root blocking gekennzeichnet. Wenn ein Thread sowohl mit Root blocking als auch mit Triggered ANR gekennzeichnet ist, gibt es keine anderen Threads, die diesen Thread blockieren.

Wenn Triggered ANR-Threads (möglicherweise transitiv) auf andere Threads gewartet haben, sind sie Root blocking. Es kann verschiedene Gründe dafür geben, dass ein Thread die Ursache für den ANR ist.

Empfehlung

Minimieren Sie CPU-intensive Aufgaben im Hauptthread. Verwenden Sie Worker- oder Hintergrund-Threads für CPU-intensive Aufgaben.

Minimieren Sie E/A-intensive Vorgänge wie das Laden aus einer Datenbank im Hauptthread.

Unknown root cause

Ein Thread wird mit dem Tag Unknown root cause gekennzeichnet, wenn er den ANR-Fehler ausgelöst hat, aber während des Prozesses inaktiv war, als der ANR-Fehler aufgetreten ist. Crashlytics hat nicht genügend Informationen, um die Ursache zu ermitteln. Es gibt keinen ersichtlichen Grund für diesen ANR-Fehler.

Empfehlung

Folgen Sie den allgemeinen Ratschlägen zum Vermeiden von ANR-Fehlern. Suchen Sie beispielsweise in Ihrem Code nach Stellen, an denen der Haupt-Thread der App länger als 5 Sekunden beschäftigt sein kann.