android - item - invalidateoptionsmenu();
¿Cuál es la diferencia entre ANR y crash en Android? (12)
ANR por ejemplo: si está descargando datos de gran cantidad en un hilo ui, meny otras posibilidades como memoria insuficiente, etc. vendrá ... probablemente lleve a bloqueos en android, no podemos decir que ambos son los mismos sigue a otros
He buscado en Internet con respecto a lo que es un ANR. Y estudié esas referencias también. Pero no recibo detalles sobre un bloqueo en Android.
¿Puede alguien decirme la diferencia entre ANR (Android no responde) y un bloqueo en Android?
ANR significa A pplication N ot R esponding.
Se producirá un ANR si está ejecutando un proceso en el subproceso de la interfaz de usuario que tarda mucho tiempo, por lo general alrededor de 5 segundos. Durante este tiempo, la GUI (interfaz gráfica de usuario) se bloqueará, lo que provocará que lo que el usuario presione no se active. Después de que hayan transcurrido los 5 segundos aproximadamente, si el hilo aún no se ha recuperado, se muestra un cuadro de diálogo ANR que informa al usuario que la aplicación no responde y le da al usuario la opción de esperar, con la esperanza de que la aplicación eventualmente recuperar, o forzar el cierre de la aplicación.
Un bloqueo se produce cuando se ha lanzado una excepción dentro de la aplicación que no se ha procesado. Por ejemplo, si intentas establecer el texto de un componente EditText
, pero EditText
es nulo y no hay una declaración try catch que capte la excepción de que tu aplicación EditText
se EditText
. El usuario no verá qué causó el bloqueo, se le mostrará un diálogo que le informará que la aplicación se ha cerrado de forma inesperada y le dará la opción de enviar un informe de error. En este ejemplo, si buscara en el informe de errores, vería el error causado por java.lang.NullPointerException
.
Espero que esto ayude.
ANR significa Application Not Responding .
Puede ocurrir debido a muchas razones, como por ejemplo si una aplicación bloquea alguna operación de E / S en el subproceso de la interfaz de usuario para que el sistema no pueda procesar los eventos entrantes de entrada del usuario. O tal vez la aplicación dedique demasiado tiempo a construir una estructura en memoria elaborada o calcular el siguiente movimiento en el hilo de la interfaz de usuario.
Si bloquea el hilo principal , no se producirá un bloqueo, pero se mostrará un mensaje emergente para que los usuarios eliminen la aplicación después de 5 segundos.
Pero para Crash , la razón principal es los errores humanos. La mayoría de las veces una aplicación se cuelga debido a un error de codificación / diseño realizado por humanos
Errores humanos
La falta de pruebas
Excepción de puntero nulo
Sin memoria
Ejemplo:
Esto es común cuando un programador hace una referencia a un objeto o variable que no existe, básicamente creando un error de puntero nulo.
Si tiene una mala conexión, eso también puede hacer que sus aplicaciones fallen. La aplicación también podría tener problemas de administración de memoria.
Consulte mi respuesta para conocer el tipo de excepción específica de Android que puede causar el bloqueo.
ANR significa Application Not Responding, lo que significa que su aplicación ya no registra eventos en el subproceso UI debido a que allí se ejecuta una operación larga.
ANR también causado por-
- No hay respuesta a un evento de entrada (como pulsación de tecla o eventos de pantalla táctil) en 5 segundos.
- Un BroadcastReceiver no ha terminado de ejecutarse en 10 segundos.
ANR y Crash Examples:
Esta pregunta ya tiene una respuesta aceptada, pero estoy agregando 2 ejemplos simples para entender ANR y Crash mejor.
ANR:
// this will produce an ANR on your app
int i = 0;
while(true) {
i++;
}
Choque:
// this will crash your app : will produce java.lang.ArithmeticException
int value = 5, i = 0;
int result = value / i;
ANR: Básicamente debido a una larga tarea en el hilo principal.
Hay algunos patrones comunes a tener en cuenta al diagnosticar los ANR:
- La aplicación está realizando operaciones lentas que implican E / S en el hilo principal.
- La aplicación está haciendo un cálculo largo en el hilo principal.
- El hilo principal es hacer una llamada de enlace sincrónico a otro proceso, y ese otro proceso tarda mucho tiempo en regresar.
- El hilo principal está bloqueado esperando un bloque sincronizado para una operación larga que está sucediendo en otro hilo.
- El hilo principal está en un punto muerto con otro hilo, ya sea en su proceso o a través de una llamada de enlace. El hilo principal no solo está esperando a que termine una operación larga, sino que se encuentra en una situación de punto muerto.
Las siguientes técnicas pueden ayudarlo a descubrir cuál de estas causas está causando sus ANR.
CHOQUE:
La razón de las colisiones puede ser muchas. Algunas razones son obvias, como buscar un valor nulo o una cadena vacía, pero otras son más sutiles, como pasar argumentos no válidos a una API o incluso complejas interacciones de subprocesos múltiples
[ANR y Crash Different] [1] Las aplicaciones de Android normalmente se ejecutan completamente en un único subproceso por defecto el "subproceso de interfaz de usuario" o "subproceso principal". Esto significa que cualquier cosa que su aplicación esté haciendo en el subproceso UI que lleve mucho tiempo completar puede desencadenar el diálogo ANR porque su aplicación no se está dando la oportunidad de manejar el evento de entrada o las transmisiones por intención.
ANR significa Application Not Responding y ocurre cuando la operación larga se lleva a cabo en el hilo principal ......
Crash se debe a una excepción y error como Nullpoint,
ANR (Aplication N ot R esponding) se debe a la long running task in Main Thread
(hilo de la interfaz de usuario). Si el hilo principal se detiene durante más de 5 segundos obtendrá ANR.
El bloqueo se debe a una exception and error
como Nullpoint, classNotfound, typecast, error de análisis, etc. ANR también provoca el bloqueo de la aplicación.
Nota: nunca ejecute una tarea de larga ejecución en el hilo de la interfaz de usuario
Referencia ANR
Aplicación que no responde (ANR):
ANR se mostrará en las siguientes condiciones:
Respuesta al evento de entrada (como pulsación de tecla o pantalla táctil) en 5 segundos.
Un Receptor de difusión no ha terminado de ejecutarse dentro de los 10 segundos.
¿Cómo evitar ANR?
Cree un hilo de trabajo diferente para operaciones de larga ejecución, como operaciones de base de datos, operaciones de red, etc.
Reforzar la capacidad de respuesta: en la aplicación de Android generalmente, de 100 a 200 ms es el umbral más allá del cual el usuario sentirá que la aplicación es lenta. Los siguientes son los consejos a través de los cuales podemos mostrar que la aplicación es más receptiva.
Muestre el cuadro de diálogo de progreso cada vez que realice un trabajo en segundo plano y un usuario está esperando la respuesta.
Para juegos específicamente, haga cálculos para movimientos en el hilo de trabajo.
- Muestre la pantalla de bienvenida si su aplicación tiene una configuración inicial que consume mucho tiempo.
Crash: el bloqueo es una condición no controlada en la aplicación y cerrará con fuerza nuestra aplicación. Algunos de los ejemplos de fallas son como la excepción de Nullpointer, la excepción de estado ilegal, etc.
ANR: It is called when anything your application is doing in the UI thread that
takes a long time to complete (5 sec approx)
Referencia: ANR
Crash: It is called when your Application gets some Error or Exception raised by the DVM