Esegui il debug della tua app Android in base ai tag ANR nella dashboard di Crashlytics

Gli errori Applicazione non risponde (ANR) vengono attivati ​​quando il thread dell'interfaccia utente dell'applicazione non risponde per più di 5 secondi . Puoi leggere ulteriori informazioni sugli ANR e sulla diagnosi degli ANR nella documentazione di Android .

Inoltre, Crashlytics può aiutare a individuare specifici thread problematici. Analizziamo gli ANR e quindi, nella dashboard di Crashlytics , contrassegniamo i thread applicabili per fornire suggerimenti su come eseguire il debug dell'ANR.

Le seguenti sezioni di questa pagina spiegano il significato di ciascun tag ANR, mostrano un esempio di ANR con quel tag e forniscono una soluzione consigliata per eseguire il debug dell'ANR.

Triggered ANR

Un thread che è stato bloccato per troppo tempo e ha attivato l'ANR viene annotato con questo Tag Triggered ANR .

Il thread problematico può essere il thread principale dell'app o qualsiasi thread che non risponde. Tuttavia, il thread contrassegnato come Triggered ANR può essere o meno la causa effettiva dell'ANR. Per fornire approfondimenti per il debug e la correzione di questi ANR, Crashlytics tagga anche tutti gli altri thread coinvolti nell'ANR. Nelle sezioni seguenti di questa pagina, scopri gli altri tag che potrebbero essere applicati a un thread.

Deadlocked

Tutti i thread coinvolti in una situazione di stallo che ha portato all'ANR vengono annotati con questo Tag Deadlocked .

Un deadlock si verifica quando un thread entra in uno stato di attesa perché una risorsa richiesta è detenuta da un altro thread, che è anch'esso in attesa di una risorsa detenuta dal primo thread. Se il thread principale dell'app si trova in questa situazione, è probabile che si verifichino ANR.

Raccomandazione

Guarda i thread coinvolti nel deadlock e controlla le risorse/i blocchi acquisiti da tali thread. Fare riferimento agli algoritmi di prevenzione del deadlock e del deadlock per le possibili soluzioni.

IO Root blocking

Qualsiasi thread che stava eseguendo operazioni di I/O lente e bloccava il file Il thread Triggered ANR è annotato con l'estensione Tag IO Root blocking . Se la Il thread Triggered ANR non è bloccato da altri thread, quindi il file Anche il thread IO Root blocking è a Filo Root blocking .

Raccomandazione

In generale, la tua app non deve eseguire costose operazioni di I/O sul thread principale. Nel caso in cui il thread principale sia IO Root blocking , puoi anche utilizzare la modalità Strict per identificare eventuali operazioni di I/O involontarie che si verificano sul thread principale.

Root blocking

Qualsiasi thread che ha bloccato il thread contrassegnato come Triggered ANR è annotato con l'estensione Tag Root blocking . Se un thread è contrassegnato come entrambi Root blocking e Triggered ANR , quindi non ci sono altri thread che bloccano quel thread.

Se presente I thread Triggered ANR ​​stavano aspettando (forse in modo transitivo) altri thread, lo sono Root blocking . Potrebbero esserci vari motivi per cui un thread è la causa principale dell'ANR.

Raccomandazione

Riduci al minimo il lavoro intensivo della CPU nel thread principale. Utilizza thread di lavoro o in background per eseguire attività ad uso intensivo della CPU.

Riduci al minimo il lavoro intensivo di I/O, come il caricamento da un database, sul thread principale.

Unknown root cause

Un thread è contrassegnato con il tag Tag Unknown root cause se è stato il thread ad attivare l'ANR ma era inattivo nel processo quando si è verificato l'ANR. Crashlytics non dispone di informazioni sufficienti per determinare la causa principale. Non vi è alcuna ragione evidente per cui si sia verificato questo ANR.

Raccomandazione

Seguire i consigli generali su come prevenire gli ANR. Ad esempio, identifica i punti del codice in cui il thread principale dell'app può essere occupato per più di 5 secondi .