OkHttp源码分析(一)

OkHttpClient

1.OkHttpClient应该创建一个单例,方便所有HTTP请求重用。 这是因为每个客户端都拥有自己的连接池和线程池, 重用这些连接和线程可以减少延迟并节省内存。 相反,为每个请求创建OkHttpClient会浪费空闲池中的资源。
实例化对象两种方式:

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

2.通过newBuilder() 方法自定义OkHttpClient实例。使用构建器提供的方法指定具体的配置项。

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

3.空闲状态下,线程池和连接池中的线程和连接将自动释放。但是,如果你的应用程序需要主动释放无用的资源,可以使用shutdown()关闭调度执行器的服务。 这也将导致后续的调用被拒绝。

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

evictAll()清除连接池。 请注意,连接池的守护程序线程可能不会立即退出。

client.connectionPool().evictAll();

如果您的客户端有缓存,请调用close()。 请注意,针对关闭的缓存创建调用是一个错误,这样做将导致调用崩溃。

client.cache().close();

OkHttp为HTTP / 2连接使用了守护线程。 如果它们保持空闲,将自动退出。

ConnectionSpec

指定socket 连接的配置。针对https:的URL包含了密码套件和TLS来加密连接。只有在SSL套接字中启用了TLS连接规范中配置的TLS版本才能使用。 例如,如果SSL套接字没有启用TLS 1.3,即使连接规范中存在TLS也不会使用。 同样的策略也适用于密码套件。使用ConnectionSpec.Builder.allEnabledTlsVersions()ConnectionSpec.Builder.allEnabledCipherSuites将所有功能选择推迟到底层SSL套接字。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值