相关视频:
问题一:简述一下OkHttp的优势
OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。
- 易使用、易扩展。
- 支持 HTTP/2 协议,允许对同一主机的所有请求共用同一个 socket 连接。
- 如果 HTTP/2 不可用, 使用连接池复用减少请求延迟。
- 支持 GZIP,减小了下载大小。
- 支持缓存处理,可以避免重复请求。
- 如果你的服务有多个 IP 地址,当第一次连接失败,OkHttp 会尝试备用地址。
- OkHttp 还处理了代理服务器问题和SSL握手失败问题。
问题二:讲一下okhttp的主要工作流程
第一步,创建Request和OkHttpClicent对象,然后将Request封装成Call对象,然后调用enqueue()方法执行异步请求;
第二步,Dispatcher的enqueue(AsyncCall)和promoteAndExecute()方法,enqueue(AsyncCall)有两个作用:一是添加AsyncCall到预执行队列readyAsyncCalls,二是设置同一Host的连接计数器;promoteAndExecute()负责真正对AsyncCall进行资源的调度:对readyAsyncCalls进行迭代循环,如果正在执行的队列size不超过64且同一Host的连接计数器的值不超过5,就将这个请求放入到runningAsyncCalls。然后遍历runningAsyncCalls,挨个执行里面的请求;
第三步,AsyncCall对象把自己作为任务交到线程池执行,提交成功后就finish掉;
问题三:OkHttp的Dispatcher类
OkHttp 3.14.10源码分析(3)- Dispatcher - 线程资源管理和分配
问题四:OkHttp的Interceptor类
官网:拦截器是Okhttp中提供的一种强大机制,它可以实现网络监听、请求、以及响应重写、请求失败重试等功能。
RetryAndFollowUpInterceptor:重试和失败重定向拦截器
BridgeInterceptor:桥接拦截器,处理一些必须的请求头信息的拦截器
CacheInterceptor:缓存拦截器,用于处理缓存
ConnectInterceptor:连接拦截器,建立可用的连接,是CallServerInterceptor的基本
CallServerInterceptor:请求服务器拦截器将 http 请求写进 IO 流当中,并且从 IO 流中读取响应 Response