2011-06-30 13 views
23

¿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é?

+1

Usted se olvidó de mencionar la plataforma que está utilizando. –

+0

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

+0

Parece que es un 'qué' – Kirby

Respuesta

44

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.

2

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:

enter image description here

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

Cuestiones relacionadas