How*_*ard 6 dns android android-networking
从旧的帖子如Android java.net.UnknownHostException:Host未解析(策略问题),它建议使用以下代码:
try {
InetAddress i = InetAddress.getByName(URLName);
} catch (UnknownHostException e1) {
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
那么这意味着当DNS条目没有被缓存在设备中时,例如在启动之后,它将java.net.UnknownHostException: Host第一次返回,即使对于有效的DNS也是如此?
这取决于安卓版本。
如果您有 Internet 连接,并且您的应用程序在清单文件中声明它需要 Internet 访问,那么该地址应该可以正常解析。
http://developer.android.com/reference/java/net/InetAddress.html
在 Android 4.0(冰淇淋三明治)及更早版本中,DNS 缓存由 InetAddress 和 C 库,这意味着无法遵守 DNS TTL 正确。在后续版本中,缓存仅由 C 库和 DNS TTL 完成 很荣幸。
因此,如果您请求的地址不早于生存时间,缓存就会回答。如果它不在缓存中或已过期,则操作系统将尝试通过 DNS 服务器来查找它。仅当您的 Internet 连接未启动或没有 DNS 响应时才会引发异常,而不是当缓存请求失败时引发异常。
也就是说,如果您正在为较旧的 Android 编写应用程序,那么这个问题可能仍然困扰着您。
有办法处理:
Android: Flush DNS
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |