OkHttp / Retrofit默认超时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OkHttp / Retrofit默认超时相关的知识,希望对你有一定的参考价值。
我想知道我应该为我的改装客户设置多少秒。
- 我应该使用多少秒作为默认超时?
- OkHttp / Retrofit的默认超时是什么,我们应该使用默认值吗?
答案
- 没有神奇的价值,取决于你后端的期望。如果有人告诉你5s是一个很好的值,并且你在一个端点上的最大加载时间平均为8s,那么8s对你不起作用。作为一般值,我已经看到低于10s被认为是短的,并且在10到20之间是常见的。
- 从OkHttp 3.4.1和Retrofit 2.1.0开始,OkHttp的默认值为10秒。 Retrofit依赖于OkHttp默认值。
改造代码片段:(如果您不提供OkHttpClient):
okhttp3.Call.Factory callFactory = this.callFactory;
if (callFactory == null) {
callFactory = new OkHttpClient();
}
OkHttp代码片段:
connectTimeout = 10_000;
readTimeout = 10_000;
writeTimeout = 10_000;
- 我可以访问的唯一Google App是Google IO应用。
他们使用不同的价值观。例如,对于feedback相关,他们使用:
public class FeedbackConstants{
public static final int FEEDBACK_CONNECT_TIMEOUT_MS = 15000;
public static final int FEEDBACK_READ_TIMEOUT_MS = 15000;
public static final int GOOGLE_API_CLIENT_CONNECTION_TIMEOUT_S = 10;
}
他们在那里使用Volley和你can take a look的一些超时。是的,他们看起来很短。
/** The default socket timeout in milliseconds */
public static final int DEFAULT_TIMEOUT_MS = 2500;
在different http client中,他们为您提供了一些关于他们认为短暂且合理的短暂超时的线索。
/**
* Default 2s, deliberately short. If you need longer, you should be using
* {@link AsyncHttpClient} instead.
*/
protected int connectionTimeout = 2000;
/**
* Default 8s, reasonably short if accidentally called from the UI thread.
*/
protected int readTimeout = 8000;
另一答案
- 它不应该永远而不是太短。恕我直言,它应该在10到30秒之间。
- Retrofit为您提供的默认连接超时设置(如果您未明确指定http客户端)为15秒。
资源:
OkHttpClient defaultClient() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(15, TimeUnit.SECONDS);
return client;
}
- 我觉得谷歌正在使用30秒。不确定。
另一答案
您可以使用
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:3000/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
欲了解更多详情,请访问:https://futurestud.io/tutorials/retrofit-2-customize-network-timeouts
另一答案
我在我的RetrofitApiClient中使用它。 okhttp版本3.4.1
public class RetrofitApiClient {
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15L, TimeUnit.SECONDS)
.writeTimeout(15L, TimeUnit.SECONDS);
public void someMethod() {
OkHttpClient client = httpClient.build();
}
}
以上是关于OkHttp / Retrofit默认超时的主要内容,如果未能解决你的问题,请参考以下文章
Retrofit+Okhttp 在 Android 中是不是默认使用 httpCaching?
Android网络框架之Retrofit + RxJava + OkHttp 变化的时代