2010-07-20 21 views
8

Tengo un código de Android que usa un proceso de fondo para conectarse de forma rutinaria (por ejemplo cada hora) a un origen de contenido en la web para verificar contenido actualizado. A medida que los nuevos usuarios descargan la aplicación y la ejecutan por primera vez, parece (y esto es solo "parece por el momento") que en esta situación de primera ejecución, debido a que los DNS de nuestros servidores ya no están en la memoria caché en el dispositivo, esas primeras series de conexiones fallan con la temida UnknownHostException: Host no se resuelve. Y, por supuesto, la aplicación lo intenta más tarde y (de nuevo, "parece que") todo está funcionando, quizás porque el sistema operativo ha tenido tiempo para resolver el problema. direcciónAndroid java.net.UnknownHostException: el host no está resuelto (pregunta de estrategia)

Así que, mi pregunta (s) es: (1) ¿Los desarrolladores de Android también ven este comportamiento con sus aplicaciones implementadas? La primera vez, una serie de problemas de "host no resuelto" que se solucionan más tarde. 2) ¿Alguien tiene una mejor estrategia para "calentar el DNS" por así decirlo para que las primeras conexiones reales funcionen? O quizás simplemente vuelva a intentarlo con algún bucle de retroceso cuando se encuentre con este ¿verdad? Estaba pensando en tener un hilo separado que intente obtener un pequeño archivo de texto de nuestro servidor y tenerlo simplemente en bucle hasta que lo tenga y tal vez (no estoy seguro de esta parte) bloquear las otras conexiones de red salientes hasta que tenga éxito.

En cualquier caso, he leído a través de una parte de las respuestas a varias preguntas redactadas de manera similar aquí en desbordamiento de pila y acabo de asegurar a todos que

<uses-permission android:name="android.permission.INTERNET" /> 

se fija en mi archivo de manifiesto :)

+1

Hemos encontrado el mismo problema. Para analizarlo, implementamos un icmp ping que envía paquetes a un dns predeterminado (8.8.8.8). Lo que observamos fue que a pesar de que la prueba de ip-ping fue exitosa (por lo tanto, hay una conexión a Internet disponible) todavía encontramos la UnknownHostException. ¿Alguna idea de lo que podría ser la razón para esto? – icyerasor

Respuesta

14

Me he encontrado con este comportamiento al usar HttpUrlConnection. Estoy usando una solución simple: ejecuto el siguiente código justo antes de usar cualquier url.

try { 
     InetAddress i = InetAddress.getByName(URLName); 
    } catch (UnknownHostException e1) { 
     e1.printStackTrace(); 
    } 
// ... actually using URLName 

Por primera vez puedo conseguir aquí pero UnknownHostException siguientes usos de la url tienen éxito (servidor DNS devuelve la dirección IP correcta y puedo conectar con el servidor).

+0

idea muy interesante, bart. para el registro, estamos usando HttpUrlConnection. ¡Gracias! Lo probaré y supervisaré para ver si vemos un número reducido de excepciones. – sorens

+0

Tuve ese mismo problema anoche con la aplicación de búsqueda de Google ... siguió volviendo host no encontrado ... alguna idea de lo que causaría eso? – androidworkz

+0

Estaba experimentando esto también, pero en el espíritu de los demás que enfrentan el problema, les gustaría escuchar que el mío fue causado por la tarjeta SD no existente y no tener almacenamiento local que dio este error de host no resuelto en mi BufferedInputStream (urlConnection.getInputStream()) llamada. – sradforth

Cuestiones relacionadas