Android java.net.UnknownHostException:主机未解决(策略问题)

Android java.net.UnknownHostException:主机未解决(策略问题),java,android,Java,Android,我有一个android代码,它使用后台进程定期(例如每小时)连接到web上的内容源,以检查更新的内容。当新用户下载并首次运行该应用程序时,它似乎是(而这只是一个“目前似乎”)在第一次运行的情况下,由于我们服务器的DNS尚未缓存在设备上,这些第一系列连接会失败,出现可怕的未知后异常:主机未解析。当然,应用程序稍后会重试(再次“看起来像”)这一切都在运行——也许是因为操作系统有时间实际解析地址 因此,我的问题是:(1)其他Android开发者是否也在他们部署的应用程序中看到了这种行为?第一次,一系列

我有一个android代码,它使用后台进程定期(例如每小时)连接到web上的内容源,以检查更新的内容。当新用户下载并首次运行该应用程序时,它似乎是(而这只是一个“目前似乎”)在第一次运行的情况下,由于我们服务器的DNS尚未缓存在设备上,这些第一系列连接会失败,出现可怕的未知后异常:主机未解析。当然,应用程序稍后会重试(再次“看起来像”)这一切都在运行——也许是因为操作系统有时间实际解析地址

因此,我的问题是:(1)其他Android开发者是否也在他们部署的应用程序中看到了这种行为?第一次,一系列“主机未解决”的问题会在以后自行解决。(2)是否有人有更好的策略来“预热DNS”“可以这么说,让第一个真正的联系起作用?或者,当您遇到此异常时,您是否只是重新尝试一些回退循环?我正在考虑使用一个单独的线程,尝试从我们的服务器获取一个小文本文件,并让它循环直到它得到它,并且可能(不确定这部分)阻止其他传出的网络连接,直到它成功

无论如何,我已经通读了关于堆栈溢出的各种类似问题的大量答案,我只是想向大家保证

<uses-permission android:name="android.permission.INTERNET" />


是在我的清单文件中设置的:)

我在使用HttpUrlConnection时遇到这种行为。我使用的是简单的变通方法——在使用任何url之前执行以下代码

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

这是我第一次在这里获得UnknownHostException,但url的下一次使用是成功的(DNS服务器返回正确的IP地址,我可以连接到服务器)。

非常有趣的想法,巴特。作为记录,我们使用的是HttpUrlConnection。谢谢我会尝试一下,然后监控一下,看看我们看到的异常数量是否减少了。我昨晚在谷歌搜索api上也遇到了同样的问题。。。它不断返回找不到的主机。。。知道是什么导致的吗?我也经历过这种情况,但本着其他遇到问题的人的精神,他们可能希望听到我的问题是由SD卡不存在且没有本地存储导致的,这导致我的BufferedInputStream(urlConnection.getInputStream())上出现此未解决的主机错误但如果您连接到无线但调制解调器已关闭,或者您可以说您已连接到网络,但没有数据传输或某些提供商问题,则会给出相同的例外情况。因此,如果主机最初不存在,我如何区分这种情况。我们遇到了相同的问题。为了分析它,我们实现了一个icmp ping,它将数据包发送到默认dns(8.8.8.8)。我们观察到,即使ip ping测试成功(因此可以使用Internet连接),我们仍然会遇到未知的异常。你知道这是什么原因吗?