6

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 也是如此?

4

1 回答 1

3

这取决于安卓的版本。

如果您有 Internet 连接并且您的应用程序在清单文件中声明它需要 Internet 访问,那么地址应该可以毫无问题地解析。

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

在 Android 4.0 (Ice Cream Sandwich) 及更早版本中,DNS 缓存由
InetAddress 和 C 库,这意味着无法接受 DNS TTL
正确。在以后的版本中,缓存仅由 C 库和 DNS TTL 完成
很荣幸。

因此,如果您要求的地址不超过生存时间,缓存会回答。如果它不在缓存中或已过期,则操作系统将尝试通过转到 DNS 服务器来找到它。仅当您的 Internet 连接未启动或没有 DNS 响应时引发异常,而不是在缓存请求失败时引发。

也就是说,如果您正在为较旧的 android 编写应用程序,那么这个问题可能仍然会困扰您。

有办法处理:
Android:Flush DNS

于 2012-10-13T06:42:06.463 回答