okhttp 应用层 OkHttpClient 实例
okhttp application level OkHttpClient instance
我想知道如果我创建一个 OkHttpClient 实例来为我的 "entire android application" 服务,是否会有任何性能瓶颈或问题。 I.e.In 我的应用程序 class,我创建了一个静态 public 变量,它将包含一个 OkHttpClient 实例,每当我需要做一个 http 请求时,我基本上构建一个请求对象,然后使用创建的 okhttpclient触发请求的实例。
代码要这样
public class MyApplication extends Application {
public static OkHttpClient httpClient;
@Override
public void onCreate() {
super.onCreate();
httpClient = new OkHttpClient();
}
}
// Making request 1
Request request1 = new Request.Builder().url(ENDPOINT).build();
Response response = MyApplication.httpClient.newCall(request1).execute();
// Making request 2
Request request2 = new Request.Builder().url(ENDPOINT).build();
Response response = MyApplication.httpClient.newCall(request2).execute();
使用单个实例不是问题,而是一种常见的做法。您可以从 github 查看类似的应用程序,它使用 dagger 制作 OkHttpClient 单例并注入其他模块。
你可以看到in this discussion JakeWharton也暗示了这种用法。
但是如果您为此目的使用单例模式会更好。
除了@bhdrkn 的正确建议之外,为了明确确认 OkHttpClient
的单例实例是正确的方法,文档摘录:
来源:https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html
OkHttpClients should be shared
OkHttp performs best when you create a single OkHttpClient instance and reuse it for all of your HTTP calls. This is because each client holds its own connection pool and thread pools. Reusing connections and threads reduces latency and saves memory. Conversely, creating a client for each request wastes resources on idle pools.
请参阅 Javadoc(上面的 link)以查看初始化 OkHttpClient
实例的正确方法。
我想知道如果我创建一个 OkHttpClient 实例来为我的 "entire android application" 服务,是否会有任何性能瓶颈或问题。 I.e.In 我的应用程序 class,我创建了一个静态 public 变量,它将包含一个 OkHttpClient 实例,每当我需要做一个 http 请求时,我基本上构建一个请求对象,然后使用创建的 okhttpclient触发请求的实例。
代码要这样
public class MyApplication extends Application {
public static OkHttpClient httpClient;
@Override
public void onCreate() {
super.onCreate();
httpClient = new OkHttpClient();
}
}
// Making request 1
Request request1 = new Request.Builder().url(ENDPOINT).build();
Response response = MyApplication.httpClient.newCall(request1).execute();
// Making request 2
Request request2 = new Request.Builder().url(ENDPOINT).build();
Response response = MyApplication.httpClient.newCall(request2).execute();
使用单个实例不是问题,而是一种常见的做法。您可以从 github 查看类似的应用程序,它使用 dagger 制作 OkHttpClient 单例并注入其他模块。
你可以看到in this discussion JakeWharton也暗示了这种用法。
但是如果您为此目的使用单例模式会更好。
除了@bhdrkn 的正确建议之外,为了明确确认 OkHttpClient
的单例实例是正确的方法,文档摘录:
来源:https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html
OkHttpClients should be shared
OkHttp performs best when you create a single OkHttpClient instance and reuse it for all of your HTTP calls. This is because each client holds its own connection pool and thread pools. Reusing connections and threads reduces latency and saves memory. Conversely, creating a client for each request wastes resources on idle pools.
请参阅 Javadoc(上面的 link)以查看初始化 OkHttpClient
实例的正确方法。