Android⾯试题:okhttp
相关视频:
问题⼀:简述⼀下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类
android retrofit问题四:OkHttp的Interceptor类
官⽹:是Okhttp中提供的⼀种强⼤机制,它可以实现⽹络监听、请求、以及响应重写、请求失败重试等功能。
RetryAndFollowUpInterceptor:重试和失败重定向
BridgeInterceptor:桥接,处理⼀些必须的请求头信息的
CacheInterceptor:缓存,⽤于处理缓存
ConnectInterceptor:连接,建⽴可⽤的连接,是CallServerInterceptor的基本
CallServerInterceptor:请求服务器将 http 请求写进 IO 流当中,并且从 IO 流中读取响应 Response
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论