2012-10-05 43 views
6

Từ bài viết cũ như Android java.net.UnknownHostException: Host is unresolved (strategy question), nó gợi ý để sử dụng đoạn mã sau:Android DNS có cần khởi động không?

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

Vì vậy, có nghĩa là khi một mục DNS không được lưu trữ trong thiết bị, ví dụ sau khi khởi động, nó sẽ trả lại java.net.UnknownHostException: Host lần đầu tiên, ngay cả đối với DNS hợp lệ?

Trả lời

3

Tùy thuộc vào phiên bản Android.

Miễn là bạn có kết nối Internet và ứng dụng của bạn tuyên bố rằng nó cần truy cập Internet trong tệp kê khai, thì địa chỉ sẽ giải quyết mà không gặp bất kỳ sự cố nào.

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.

Vì vậy, nếu địa chỉ mà bạn đang yêu cầu là không lớn tuổi hơn thời gian để sống, bộ nhớ cache sẽ trả lời. Nếu nó không có trong cache hoặc đã hết hạn thì hệ điều hành sẽ cố gắng tìm nó bằng cách vào một máy chủ DNS. Ngoại lệ chỉ được ném khi kết nối Internet của bạn không bật lên hoặc khi không có phản hồi DNS, không phải khi yêu cầu bộ nhớ cache không thành công.

Điều đó nói rằng, nếu bạn đang viết ứng dụng của bạn cho android cũ hơn, sau đó vấn đề này có thể pester bạn vẫn còn.

Có nhiều cách để giải quyết:
Android: Flush DNS

Các vấn đề liên quan