作为标准主机名解析的替代方案(例如,在 Java 中通过InetAddress.getAllByName()),可以使用 DNSJava 或 MiniDNS 等库。
关于 MiniDNS
对于在 Android 上使用,文档指出:
AndroidUsingLinkProperties:使用 Android API 21 或更高版本上可用的 Android 链接属性方法的 DNS 服务器查找机制。使用“ setup(Context) ”来设置这个机制。
AndroidResolverConfigProvider:与所有其他提供程序相反,此提供程序需要一个上下文来操作,必须通过调用“ setContext(Context) ”来设置该上下文。
如果您正在为 Android 开发,请考虑实现您自己的 ResolverConfigProvider 来侦听网络回调并正确刷新链接更改。
无论如何,您都需要做一些事情来调用“ ResolverConfig.refresh() ”,否则几乎可以保证迟早会有过时的服务器。
从文档中我不清楚两者之间的关系。我假设非常简单的方法:
ResolverResult<A> result = ResolverApi.INSTANCE.resolve(hostName, A.class);
... 在 Android 上可能无法给出正确的结果。我可以在我的设备上看到,尽管设备实际上已连接到 WiFi,但该库尝试联系我的移动连接的 DNS 服务器。
同样在 Android 上,应用程序和活动有不同的上下文。
是否有使用哪个上下文的最佳实践?
是否有关于在 Android 上以正确方式使用 MiniDNS 的基本示例?
关于 DNSJava
自述文件指出“在 Android 上使用 ConnectivityManager(需要使用 org.xbill.DNS.config.AndroidResolverConfigProvider.setContext 进行初始化)。 ”但在示例中没有在 Android 上使用的示例。所以我假设第一个例子:
InetAddress addr = Address.getByName("www.dnsjava.org");
... 在 Android 上可能无法给出正确的结果。
是否有在 Android 上以正确方式使用 DNSJava 的最佳实践或基本示例?