从Android java.net.UnknownHostException: Host is unresolved (strategy question)等旧帖子中,建议使用以下代码:
try {
InetAddress i = InetAddress.getByName(URLName);
} catch (UnknownHostException e1) {
e1.printStackTrace();
}
这意味着什么时候DNS条目没有被缓存在设备中,例如启动后,它将第一次返回java.net.UnknownHostException: Host
,即使是有效的DNS?
答案 0 :(得分:3)
这取决于android的版本。
如果您有Internet连接并且您的应用程序声明它需要在清单文件中访问Internet,则该地址应该没有任何问题地解决。
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.
因此,如果您要求的地址不早于生存时间,则缓存将回答。如果它不在缓存中或已过期,则操作系统将尝试通过转到DNS服务器来查找它。仅当您的Internet连接未启动或没有DNS响应时才会抛出异常,而不是在缓存请求失败时抛出异常。
那就是说,如果您正在为旧机器人编写应用程序,那么这个问题可能会让您感到不安。
有办法解决这个问题:
Android: Flush DNS