Android DNS需要热身吗?

时间:2012-10-05 08:33:57

标签: android dns android-networking

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?

1 个答案:

答案 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