studio programacion herramientas fundamentos con avanzado aplicaciones android exception catch-block android-anr-dialog

programacion - manual de android en pdf



¿Es "ANR" una excepción o un error o qué? (2)

ANR (aplicación no responde) no es exactamente un error. Se muestra cuando su aplicación es muy lenta y lleva mucho tiempo responder, por lo que el usuario espera. El usuario no apreciará si su aplicación los hace esperar por mucho tiempo. Por lo tanto, 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 está realizando 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 subproceso principal está bloqueado. La solución es hacer las operaciones pesadas en un subproceso de trabajo y mantener el hilo principal libre.

¿Es la ANR una excepción, un error o qué? ¿Podemos realmente atraparlo en una estructura try{} catch(){} ?


El cuadro de diálogo Aplicación no responde (ANR)

Como puede imaginar, si el subproceso principal está ocupado con un cálculo pesado o leyendo datos de una toma de red, no puede responder inmediatamente a las entradas del usuario, como un toque o deslizamiento.

Una aplicación que no responde rápidamente a la interacción del usuario se sentirá sin respuesta: se notará un retraso de más de un par de cientos de milisegundos. Este es un problema tan pernicioso que la plataforma Android protege a los usuarios de las aplicaciones que hacen demasiado en el hilo principal.

Aviso :

Si una aplicación no responde a la entrada del usuario en cinco segundos, el usuario verá el cuadro de diálogo Aplicación que no responde (ANR) y se le ofrecerá la opción de salir de la aplicación.

La siguiente captura de pantalla muestra un diálogo típico de Android ANR:

Android trabaja duro para sincronizar los redibujados de la interfaz de usuario con la frecuencia de actualización de hardware. Esto significa que pretende volver a dibujar a una velocidad de 60 cuadros por segundo, que es de solo 16.67 ms por cuadro. Si trabajamos en el subproceso principal que lleva cerca de 16 ms, corremos el riesgo de afectar la velocidad de fotogramas, lo que resulta en un jank: animaciones entrecortadas, desplazamientos bruscos, etc.

Idealmente, por supuesto, no queremos soltar un solo cuadro. Jank, la falta de respuesta, y especialmente el ANR, ofrece una experiencia de usuario muy pobre, que se traduce en malas críticas y aplicaciones impopulares. Una regla que debe seguir al construir aplicaciones de Android es: ¡no bloquee el hilo principal!

Aviso :

Android proporciona una configuración de modo estricto útil en Opciones de desarrollador en cada dispositivo, que parpadeará en la pantalla cuando las aplicaciones realicen operaciones de larga duración en el hilo principal.

Se agregó protección adicional a la plataforma en Honeycomb (nivel API 11) con la introducción de una nueva clase de Excepción, NetworkOnMainThreadException, una subclase de RuntimeException que se lanza si el sistema detecta actividad de red iniciada en el hilo principal.

Fuente :

Programación asíncrona de Android - Segunda edición - Helder Vasconcelos - Julio 2016