Est-ce que" ANR " est une exception ou une erreur ou quoi?

est-ce que L'ANR est une exception, une erreur ou quoi? Peut-on vraiment l'attraper dans une structure try{} catch(){} ?

23
demandé sur Kirby 2011-06-30 23:28:55

2 réponses

ANR (demande ne répondant pas) n'est pas exactement une erreur. Il est indiqué lorsque votre application est très lente et prend beaucoup de temps pour répondre, rendant ainsi à l'utilisateur d'attendre. L'utilisateur n'appréciera pas si votre application les fait attendre longtemps. Ainsi, le cadre Android donne à l'utilisateur une option de fermeture de votre application. http://developer.android.com/guide/practices/design/responsiveness.html

Cela se produit lorsque vous effectuez des opérations de longue durée sur le thread principal. Le système ne peut pas traiter les interactions des utilisateurs pendant cette période puisque le thread principal est bloqué. La solution est de faire les opérations lourdes dans un filetage ouvrier et de garder le filetage principal libre.

45
répondu rogerstone 2016-03-23 18:44:09

L'Application ne Répond Pas (ANR) boîte de dialogue

comme vous pouvez l'imaginer, si le fil principal est occupé avec un calcul lourd ou la lecture les données d'une socket de réseau, il ne peut pas répondre immédiatement à l'entrée d'utilisateur tel que appuyez ou faites glisser votre doigt.

Une application qui ne répond pas rapidement à l'interaction de l'utilisateur sentira pas de réponse-plus de deux cents millisecondes de retard est notable. C'est un problème pernicieux que la plateforme Android protège utilisateurs d'applications qui en font trop sur le thread principal.

Avis :

si une application ne répond pas à l'entrée de l'utilisateur dans les cinq secondes, le l'utilisateur verra la boîte de dialogue Application Not Responding (ANR) et sera offert l'option de quitter la demande.

la capture d'écran suivante montre un dialogue ANR typique D'Android:

enter image description here

Android travaille dur pour synchroniser l'interface utilisateur redessine avec le matériel-le taux de rafraîchissement. Cela signifie qu'il vise à redessiner au taux de 60 images par la deuxième c'est juste 16.67 ms par image. Si nous travaillons sur le fil principal qui prend près de 16 ms, nous risquons d'affecter le taux de trame, résultant en jank-stuttering des animations, des défilés saccadés, etc.

idéalement, bien sûr, nous ne voulez pas laisser tomber une seule image. Jank, manque de réactivité, et surtout L'ANR, offrent une très mauvaise expérience utilisateur, ce qui se traduit en mauvaises critiques et applications impopulaires. Une règle à respecter lors de la construction D'Android applications: ne pas bloquer le thread principal!

Avis :

Android fournit un réglage de mode strict utile dans les Options de développement sur chaque appareil, ce qui clignotent sur l'écran lorsque les applications effectuer opérations de longue durée sur le fil principal.

une protection supplémentaire a été ajoutée à la plate-forme dans Honeycomb (niveau API 11) avec le introduction d'une nouvelle classe D'Exception, NetworkOnMainThreadException, une sous-classe de RuntimeException qui est lancé si le système détecte l'activité réseau initialisée sur le thread principal.

Source:

Asynchrone Android De Programmation - Deuxième Édition - Helder Vasconcelos - Juillet 2016

2
répondu 2016-10-26 07:43:05