理由
- AndroidはDNS処理のためにipv6を優先します。なぜ遅いのですか?それはまだ調査中です...また私にアドバイスしてください、ありがとう?
解決
- 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);
}
}
}
}