【发布时间】:2010-07-20 19:34:36
【问题描述】:
我的 android 代码使用后台进程定期(例如每小时)连接到网络上的内容源以检查更新的内容。当新用户第一次下载应用程序并运行它时,在第一次运行的情况下(这只是“目前看来”),因为我们服务器的 DNS 尚未缓存在设备上,那些第一系列连接失败并出现可怕的 UnknownHostException: Host is unresolved. 当然,应用程序稍后再试一次并且(再次,“看起来”)它一切正常——也许是因为操作系统有时间实际解决地址。
所以,我的问题是:(1) 其他 Android 开发人员是否也看到他们部署的应用程序的这种行为?第一次,一系列“主机未解决”的问题后来自行解决。 (2) 可以这么说,有没有人有更好的“预热 DNS”策略,以便第一个真正的连接起作用?或者当您遇到此异常时,您是否只是重新尝试一些退避循环?我正在考虑有一个单独的线程尝试从我们的服务器获取一个小文本文件并让它循环直到它得到它并且可能(不确定这部分)阻止其他传出网络连接直到它成功。
无论如何,我已经阅读了 Stack Overflow 上各种措辞相似的问题的大部分答案,我只是向大家保证
<uses-permission android:name="android.permission.INTERNET" />
在我的清单文件中设置:)
【问题讨论】:
-
我们遇到了同样的问题。为了分析它,我们实现了一个将数据包发送到默认 dns (8.8.8.8) 的 icmp ping。我们观察到的是,即使 ip-ping 测试成功(因此 Internet 连接可用),我们仍然遇到 UnknownHostException。知道这可能是什么原因吗?