¿Es el ANR una excepción, un error o qué? ¿Podemos atraparlo en una estructura try{} catch(){}
?¿Es "ANR" una excepción o un error o qué?
Respuesta
ANR (la aplicación no responde) no es exactamente un error. Se muestra cuando la aplicación es muy lenta y requiere mucho tiempo para responder, haciendo que el usuario espere. El usuario no apreciará si su aplicación hace que espere mucho tiempo. Entonces, el marco de Android le da al usuario la opción de cerrar su aplicación. http://developer.android.com/guide/practices/design/responsiveness.html
Esto ocurre cuando se realizan operaciones de larga ejecución en el hilo principal. El sistema no puede procesar las interacciones del usuario durante este período ya que el hilo principal está bloqueado. La solución es hacer las operaciones pesadas en un hilo de trabajo y mantener el hilo principal libre.
La aplicación no responde (ANR) de diálogo
Como se puede imaginar, si el hilo principal está ocupada con un cálculo pesada o leer datos de una toma de red, puede no respondió inmediatamente a la entrada del usuario, tales como toca o desliza.
Una aplicación que no responde rápidamente a la interacción del usuario se sentirá que no responde -nada más que un par de cientos de milisegundos de retardo es notable. Este es un problema tan pernicioso que la plataforma Android protege a los usuarios de de aplicaciones que hacen demasiado en el hilo principal.
Aviso:
Si una aplicación no responde a la entrada del usuario dentro de FVE segundos, el usuario verá la aplicación no responde de diálogo (ANR) y se le ofrecerá la opción de salir de la aplicación.
La siguiente captura de pantalla muestra un cuadro de diálogo típico Android ANR:
Android trabaja duro para sincronizar la interfaz de usuario se actualiza con la tasa de actualización de hardware . Esto significa que intenta volver a dibujar a una velocidad de 60 fotogramas por segundos, eso es solo 16,67 ms por fotograma. Si trabajamos en el hilo principal que toma en cualquier lugar cerca de 16 ms, corremos el riesgo de afectar la velocidad de cuadro, lo que da como resultado animaciones de de jank-tartamudeo, desplazamiento espasmódico, etc.
Idealmente, por supuesto, no queremos soltar un solo cuadro. Jank, falta de respuesta, y especialmente el ANR, ofrecen una experiencia de usuario muy pobre, lo que se traduce en malas críticas y aplicaciones impopulares. Una regla para vivir cuando se crean aplicaciones Android es: ¡no bloquee el hilo principal!
Aviso:
Android proporciona un entorno útiles modo estricto en Opciones de desarrollo en cada dispositivo, que parpadeará en la pantalla cuando las aplicaciones realizan operaciones de larga duración en el hilo principal.se añadió
protección adicional a la plataforma en nido de abeja (nivel API 11) con el introducción de una nueva clase de excepción, NetworkOnMainThreadException, una subclase de RuntimeException que se produce si el sistema detecta actividad de red inicia en el hilo principal .
Fuente:
programación asincrónica Android - Segunda Edición - Helder Vasconcelos - Julio el año 2016
- 1. ANR keyDispatchingTimedOut error
- 2. lanzar una excepción o devolver null
- 3. C#: ¿Levantas o lanzas una excepción?
- 4. ¿Qué es el archivo * .o?
- 5. ¿Es esto un error del compilador o es mi código?
- 6. ¿Debo devolver nulo o lanzar una excepción?
- 7. ¿Amplify.store devuelve un error o detecta una excepción cuando se excede el límite de almacenamiento local?
- 8. WinApp Form Crash sin ningún error o excepción .NET
- 9. ¿Es un objeto o una interfaz? ¿Debo liberarlo o no?
- 10. ¿Qué es mejor, o ExpectedException @test (esperado =
- 11. ¿Qué es O (log * N)?
- 12. ¿Es esto un error de JVM o "comportamiento esperado"?
- 13. excepción extraña de Python. ¿He encontrado mi primer error de Python o es este un error novato?
- 14. Error de función: ¿Subir excepción o devolver FALSO? ¿Cuál es el mejor enfoque?
- 15. ¿Qué es exactamente una superficie en OpenGL ES o Direct3D?
- 16. ¿Es esto un yeso o una construcción?
- 17. ¿Qué es un "error de doble pila"?
- 18. "error: NULL" o "error: nil"?
- 19. ¿Qué es intptr_t, es un tipo para entero o puntero?
- 20. NSDateFormatter, ¿estoy haciendo algo mal o es esto un error?
- 21. C++ Excepciones; int o std :: excepción?
- 22. Cómo capturar y devolver (o imprimir) una excepción en un ORACLE PL/SQL crear o reemplazar un procedimiento almacenado
- 23. Cómo saber si un Tipo es una lista o matriz o IEnumerable o
- 24. en un bloque "using" es un SqlConnection cerrado en devolución o excepción?
- 25. ¿Por qué es mejor lanzar una excepción en lugar de devolver un código de error?
- 26. ¿Cómo saber si un objeto es un número entero o una cadena o isa booleano?
- 27. ¿Es Linq o Lambda?
- 28. ¿Qué es más rápido, XPath o Regexp?
- 29. ¿Qué es mejor? OpenCyc o ConceptNet?
- 30. ¿Excepción estándar o personalizada en C++?
Usted se olvidó de mencionar la plataforma que está utilizando. –
Busque "I/Coreógrafo (xxx): marcos saltados xxx! La aplicación puede estar haciendo demasiado trabajo en su hilo principal". en tu logcat Esto puede ayudarlo a encontrar su problema. – Christ
Parece que es un 'qué' – Kirby