2012-10-05 13 views
6

Od dawnych stanowiskach takich jak Android java.net.UnknownHostException: Host is unresolved (strategy question), jest zalecane, aby użyć następującego kodu:Czy Android DNS wymaga rozgrzania?

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

Więc to znaczy, gdy wpis DNS nie jest buforowane w urządzeniu, na przykład po uruchomieniu, po raz pierwszy zwróci java.net.UnknownHostException: Host, nawet dla prawidłowego DNS?

Odpowiedz

3

To zależy od wersji Androida.

Jeśli masz połączenie z Internetem i aplikacja deklaruje, że potrzebuje dostępu do Internetu w pliku manifestu, adres powinien zostać rozwiązany bez żadnych problemów.

http://developer.android.com/reference/java/net/InetAddress.html

In Android 4.0 (Ice Cream Sandwich) and earlier, DNS caching was performed both by 
InetAddress and by the C library, which meant that DNS TTLs could not be honored 
correctly. In later releases, caching is done solely by the C library and DNS TTLs 
are honored.

Więc jeśli adres prosicie nie starsze niż czas żyć, pamięć podręczna będzie odpowiedzieć. Jeśli nie znajduje się w pamięci podręcznej lub wygasł, system operacyjny spróbuje go znaleźć przechodząc na serwer DNS. Wyjątek jest zgłaszany tylko wtedy, gdy połączenie internetowe nie działa lub gdy nie ma odpowiedzi DNS, a nie gdy żądanie pamięci podręcznej nie powiedzie się.

To powiedziawszy, jeśli piszesz aplikację dla starszych androidów, to ten problem może Cię jeszcze stresować.

Istnieją sposoby radzenia sobie z nim:
Android: Flush DNS

Powiązane problemy