在ConnectivityManager文档的bindProcessToNetwork
javadoc中,有以下注释:
使用由...创建的单独绑定套接字 Network.getSocketFactory()。createSocket()和执行 通过Network.getAllByName进行网络特定的主机名解析 首选调用bindProcessToNetwork。
在OkHttp中,有setSocketFactory
来满足评论的第一部分,但我不知道如何/在哪里使用Network.getAllByName
来执行主机名解析。
知道怎么做吗?
答案 0 :(得分:1)
好的,所以我终于找到了如何执行该操作。
正如我在我的问题中所说,我使用OkHttpClient
来设置我的socketfactory。使用dns
进行名称解析时也是如此(它需要OkHttp3)。
OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder()
.socketFactory(network.getSocketFactory())
.dns(NetworkDns.getInstance())
我的NetworkDns类正在寻找类似的东西
public class NetworkDns implements Dns {
private static NetworkDns sInstance;
private Network mNetwork;
public static NetworkDns getInstance() {
if (sInstance == null) {
sInstance = new NetworkDns();
}
return sInstance;
}
public void setNetwork(Network network) {
mNetwork = network;
}
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
if (mNetwork != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return Arrays.asList(mNetwork.getAllByName(hostname));
}
return SYSTEM.lookup(hostname);
}
private NetworkDns() {
}
}
这样,当network不为null时,它将在给定网络上执行主机名解析。