Answers:
在典型的Linux系统上,可以通过运行清除缓存/etc/init.d/nscd restart
,但是至少我的ROM不使用nscd缓存DNS。您可以检查您是否这样做,但我对此表示怀疑。我已经看到一些建议,清除浏览器缓存也将清除DNS缓存,但是一种可靠的方法是进行硬重启(关机,取出电池30秒钟,重新连接电池并重新启动)。
默认情况下,地址被缓存600秒(10分钟)。查找失败将被缓存10秒钟。从我所看到的一切来看,没有内置任何刷新缓存的内容。这显然是Android中已报告的错误,因为它存储DNS缓存的方式。清除浏览器缓存不会影响DNS,“硬重置”会清除它,因为它只是超时。
我们能否问一下需要清除DNS缓存的根本原因?也许还有其他解决方案被遗漏了,因为我们没有考虑更大的范围。
在Android中执行此操作的唯一方法是进行硬重启。必要的命令行工具通常不可用,但是在我的测试中,硬重启始终为我解决了问题(Galaxy Nexus和HTC Desire,各种ROM)。
这很痛苦,但是比10分钟的缓存超时要快。
还有Internet Booster之类的应用程序,它们承诺“清除DNS缓存”(以及其他功能)。我没有亲自尝试过,而且似乎没有办法只做那个(只有一个“优化”按钮“应用改进”);此外,其效果可能在设备之间有所不同(例如应用程序的说明),但它可能比重启更好。顺便说一句:虽然没有提到root是必需的,但仍然可能需要它。
Google Play上列出了几种“类似的应用”,但请注意,其中大多数都包含Airpush广告和/或需要过多的权限,这就是为什么我在这里未将其命名的原因。
我在MadPC上找到了另一种可能的解决方案(未经我自己测试),似乎在引用user8522的答案之前就说过:
最后一个选项,但是对用户本身来说最耗费精力,除非他们只想等待更新:让用户进入设置->应用程序->网络位置->清除数据
另一个简短的操作方法提到了刷新DNS的另一种简单方法(再次,我自己也没有进行测试):只需切换到飞行模式(糟糕,没有网络?)然后再返回(啊,有)就可以解决问题。听起来可能很愚蠢,但是我可以想象进入飞行模式时,Android会执行与相似的操作/etc/init.d/networking stop
,该操作具有DNS刷新的副作用。
提供了一个非常简单的解决方案 dtumaykin在下面的评论中:只需切换为飞行模式并返回即可(当然,网络的副作用会持续几秒钟;)尽管可能不起作用在某些设备上,值得一试:无需额外安装,即使n00bs也可以轻松执行。
如果有人尝试了其中一种解决方案,那么肯定欢迎(或相反):)
ndc resolver flushdefaultif
和ndc resolver flushif wlan0
; 他们需要root。还有NetworkManagementService.flushDefaultDnsCache()方法,该方法仅在JB之前需要CHANGE_NETWORK_STATE,但是随后被锁定为CONNECTIVITY_INTERNAL。因此,显然存在一种无需root即可清除DNS缓存的黑客方式(在build.prop调整后杀死了Java级别的缓存之后),但它在JB中不起作用。
就我而言,我只有一个需要刷新的域名。诸如切换飞行模式,执行硬重启或chrome:// net-internals /#dns中的操作之类的建议对我不起作用。相反,我暂时将WiFi设置更改为使用8.8.8.8的Google名称服务器。
这些是我采取的步骤:
完成这些步骤后,当我ping
在控制台中编辑域名时,它解析为正确的IP地址,并且似乎覆盖了旧的缓存地址。大概在浏览器中访问该域将具有相同的效果。
当我返回WiFi并将“ IP设置”设置回“ DHCP”时,正确的域继续解析为当前IP地址。
这是在运行Android 5.1.1的Sony Xperia Z3上