OkHttp 与 Retrofit

OkHttp

一、 流程解读

在这里插入图片描述

(1)创建okHttpClient对象与request对象 ,使用了了建造者模式。
(2)client通过newCall创建RealCall类实例,由RealCall负责进行网络请求操作
(3)异步请求 RealCall.enqueue()

RealCall.java

 @Override public void enqueue(Callback responseCallback) {
    //TODO 
    synchronized (this) {
      if (executed) throw new IllegalStateException("Already Executed");
      executed = true;
    }
    captureCallStackTrace();
    eventListener.callStart(this);
    //TODO 交给 dispatcher调度器 进行调度
    client.dispatcher().enqueue(new AsyncCall(responseCallback));
  }

synchronized (this) 确保每个call只能被执行一次不能重复执行
Dispatcher 调度器 将 Call 加入队列,并通过线程池执行 Call

Dispatcher同时能进行的最大请求数64,同时请求的相同HOST的最大个数 :5 
Dispatcher管理两个异步请求队列,可对多个并发网络请求进行处理。
Dispatcher将Call加入队列中(若同时请求数未超过最大值,则加入运行队列,放到线程池中执行;否则加入等待队列),然后通过线程池执行call

(4)线程池讲解
(5)通过拦截器链 RealInterceptorChain 通过 责任链模式 真正执行网络请求
真正的执行网络请求和返回响应结果:getResponseWithInterceptorChain()
chain.proceed() 通过该方法进行责任链的执行

RetryAndFollowUpInterceptor:负责失败重试以及重定向的;
BridgeInterceptor:负责把用户构造的请求转换为发送到服务器的请求、把服务器返回的响应转换为用户友好的响应
CacheInterceptor: 负责读取缓存直接返回、更新缓存的
ConnectInterceptor: 负责和服务器建立连接
networkInterceptors: 配置OkHttpClient时设置
CallServerInterceptor: 负责向服务器发送请求数据、从服务器读取响应数据
还可自定义拦截:日志拦截器

设计模式

  • 建造者模式:
    将一个复杂的对象的构建与它的表示分离,使
    得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

  • 简单工厂模式
    okhttp 实现了Call.Factory接口

  • 建造者模式与简单工厂模式区别:
    都是用来创建一个对象,并且用户不用关心实际创建过程
    (1)建造者更注重于部件的组装来完成对象的创建,一步步去创建对象,工厂模式直接返回要创建的对象,不关系各部分是如何创建出来的。
    (2)工厂模式返回不同的对象是通过接口继承,建造者模式时通过组成部分不同来创建不同对象,建造者粒度更细。

  • 责任链模式
    为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止
    调用 chain.proceed(requestBuilder.build())之后,调用链会不断的取下一个拦截器执行,直到取到最后一个拦截器,并执行返回Response。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值