原因
- Android会优先选择ipv6 的进行dns的处理,具体为啥会慢,还在探索中…,也请大神们指教一下,多谢?
解决方式
- 重置Android的线路选择,优先选择ipv4(基于okhttp)
- 代码
OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.dns(new EngDNS())
class EngDNS implements Dns {
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
if (TextUtils.isEmpty(hostname)) {
return Dns.SYSTEM.lookup(hostname);
} else {
try {
List<InetAddress> inetAddressList = new ArrayList<>();
InetAddress[] inetAddresses = InetAddress.getAllByName(hostname);
for (InetAddress inetAddress : inetAddresses) {
if (inetAddress instanceof Inet4Address) {
inetAddressList.add(0, inetAddress);
} else {
inetAddressList.add(inetAddress);
}
}
return inetAddressList;
} catch (NullPointerException ex) {
return Dns.SYSTEM.lookup(hostname);
}
}
}
}