Los errores de aplicación que no responde (ANR) se activan cuando el hilo de la interfaz de usuario de la aplicación no responde durante más de
Además, Crashlytics puede ayudar a identificar temas problemáticos específicos. Analizamos los ANR y luego, en el panel de Crashlytics , etiquetamos los subprocesos aplicables para proporcionar sugerencias sobre cómo depurar el ANR.
Las siguientes secciones de esta página explican lo que significa cada etiqueta ANR, muestran un ANR de ejemplo con esa etiqueta y proporcionan una solución recomendada para depurar la ANR.
Triggered ANR
Un hilo que estuvo bloqueado durante demasiado tiempo y activó el ANR se anota con estoTriggered ANR
.
El hilo problemático puede ser el hilo principal de la aplicación o cualquier hilo que no responda. Sin embargo, el hilo etiquetado comoTriggered ANR
puede o no ser la causa real de la ANR. Para proporcionar información para depurar y corregir estos ANR, Crashlytics también etiqueta cualquier otro subproceso que esté involucrado en el ANR. En las siguientes secciones de esta página, obtendrá información sobre las otras etiquetas que se podrían aplicar a un hilo.
Deadlocked
Cualquier hilo que se encuentre involucrado en un punto muerto que condujo al ANR se anota con esteDeadlocked
.
Se produce un punto muerto cuando un subproceso entra en estado de espera porque otro subproceso retiene un recurso requerido, que también está esperando un recurso retenido por el primer subproceso. Si el hilo principal de la aplicación se encuentra en esta situación, es probable que se produzcan ANR.
Recomendación
Mire los subprocesos involucrados en el punto muerto y verifique los recursos/bloqueos adquiridos por esos subprocesos. Consulte los algoritmos de interbloqueo y prevención de interbloqueo para conocer posibles soluciones.
IO Root blocking
Cualquier subproceso que estuviera ejecutando operaciones de E/S lentas y bloqueara elTriggered ANR
está anotado con elIO Root blocking
. Si elTriggered ANR
no está bloqueado por otros hilos, entonces elIO Root blocking
también es unRoot blocking
.
Recomendación
En general, su aplicación no debería ejecutar costosas operaciones de E/S en el hilo principal. En el caso de que el hilo principal seaIO Root blocking
, también puede utilizar el modo estricto para identificar cualquier operación de E/S no intencionada que esté sucediendo en el subproceso principal.
Root blocking
Cualquier hilo que bloqueó el hilo etiquetado comoTriggered ANR
está anotado con elRoot blocking
. Si un hilo está etiquetado como ambosRoot blocking
yTriggered ANR
, entonces no hay otros subprocesos que bloqueen ese subproceso.
Si algunaTriggered ANR
estaban esperando (tal vez transitivamente) otros subprocesos, estánRoot blocking
. Podría haber varias razones por las cuales un hilo es la causa raíz del ANR.
Recomendación
Minimiza el trabajo intensivo de la CPU en el hilo principal. Utilice subprocesos de trabajo o en segundo plano para realizar tareas que requieren un uso intensivo de la CPU.
Minimiza el trabajo intensivo de E/S, como la carga desde una base de datos, en el hilo principal.
Unknown root cause
Un hilo está etiquetado con elUnknown root cause
si fue el hilo que desencadenó el ANR pero estaba inactivo en el proceso cuando ocurrió el ANR. Crashlytics no tiene suficiente información para determinar la causa raíz. No hay ninguna razón evidente por la que se haya producido esta ANR.
Recomendación
Siga los consejos generales sobre cómo prevenir las ANR. Por ejemplo, identifique los lugares en su código donde el hilo principal de la aplicación puede estar ocupado durante más de