OkHttp之OkHttpClient

okhttp3.OkHttpClient

public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory

Call.Factory 用来发送请求和接收响应

OkHttpClient 使用单例模式能够发挥更好的效果。每一个client 拥有各自的连接池和线程池,复用连接和线程可以降低延迟和减少内存消耗,为每个请求创建client会把资源浪费在闲置的池上。

创建一个默认的OkHttpClient实例:

// The singleton HTTP client.
public final OkHttpClient client = new OkHttpClient();

或者通过OkHttpClient.Builder创建一个自定义的OkHttpClient实例:

   // The singleton HTTP client.
    public final OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new HttpLoggingInterceptor())
                .cache(new Cache(cacheDir, cacheSize))
                .build();

定制一个OkHttpClient

        OkHttpClient eagerClient = client.newBuilder()
                .readTimeout(500, TimeUnit.MILLISECONDS)
                .build();
        Response response = eagerClient.newCall(request).execute();

通过newBuilder创建的client和原始client共用连接池和线程池,用这种衍生的client来实现特殊的请求,上面的示例就是设置此衍生的client请求超时时间为500,其他配置与原始client相同。

闲置的连接与线程会自动释放,也可以手动释放,调用dispatcher的executorService的shutDown方法。这样后面的所有网络访问也就会被拒绝了。

client.dispatcher().executorService().shutdown();

清空连接池,连接池的守护线程可能不会立即结束。

client.connectionPool().evictAll();

如果client使用了缓存,关闭缓存使用

 client.cache().close();

如果关闭缓存之后仍然进行网络请求,会出现异常。

OkHttp的HTTP/2连接也使用了守护线程,当它闲置的时候会自动回收。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值