Depure su aplicación de Android según las etiquetas ANR en el panel de Crashlytics

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 5 segundos . Puede leer más sobre los ANR y el diagnóstico de ANR en la documentación de Android .

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 esto Etiqueta Triggered 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 como Triggered 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 este Etiqueta Deadlocked .

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 el El hilo Triggered ANR está anotado con el Etiqueta IO Root blocking . Si el El hilo Triggered ANR no está bloqueado por otros hilos, entonces el El hilo IO Root blocking también es un Hilo Root 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 sea IO 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 como Triggered ANR está anotado con el Etiqueta Root blocking . Si un hilo está etiquetado como ambos Root blocking y Triggered ANR , entonces no hay otros subprocesos que bloqueen ese subproceso.

Si alguna Los subprocesos Triggered ANR estaban esperando (tal vez transitivamente) otros subprocesos, están Root 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 el Etiqueta Unknown 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 5 segundos .