Gli errori Applicazione non risponde (ANR) vengono attivati quando il thread dell'interfaccia utente dell'applicazione non risponde per più di
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 questoTriggered ANR
.
Il thread problematico può essere il thread principale dell'app o qualsiasi thread che non risponde. Tuttavia, il thread contrassegnato comeTriggered 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 questoDeadlocked
.
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 fileTriggered ANR
è annotato con l'estensioneIO Root blocking
. Se laTriggered ANR
non è bloccato da altri thread, quindi il fileIO Root blocking
è aRoot 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 siaIO 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 comeTriggered ANR
è annotato con l'estensioneRoot blocking
. Se un thread è contrassegnato come entrambiRoot blocking
eTriggered ANR
, quindi non ci sono altri thread che bloccano quel thread.
Se presenteTriggered ANR
stavano aspettando (forse in modo transitivo) altri thread, lo sonoRoot 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 tagUnknown 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