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

时间:2010-07-20 19:34:36

标签: java android

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

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

无论如何,我已经在Stack Overflow上阅读了各种类似措辞问题的答案,我只是向所有人保证

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

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

1 个答案:

答案 0 :(得分:15)

我在使用HttpUrlConnection时遇到过这种行为。我使用简单的解决方法 - 我在使用任何url之前执行以下代码。

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

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