美文网首页
OKHttp -- 工作流程分析

OKHttp -- 工作流程分析

作者: Jcccccccccc | 来源:发表于2018-02-02 10:33 被阅读81次
    图1:工作流程图

    工作分析:

    1、创建Call

    同步:

    2、将Call直接添加到Dispatcher的runningAsyncCalls队列中,同时
    3、调用getResponseWithInterceptorChain进入链式工作流程
    4、将Response返回给调用者
    5、调用Dispatcher的finish移除该Call,并调用promoteCalls检查队列,执行等待的请求

    异步

    2、将使用Callback为参数创建AsyncCall对象,并将其添加到Dispatcher的队列中,等待队列执行
    3、队列中取出待执行的请求,使用线程池执行AsyncCall(继承Runnable),执行getResponseWithInterceptorChain,并将结果通过callback返回

    Dispatcher中的三个队列:

    • readyAsyncCalls:准备运行的异步请求
    • runningAsyncCalls:正在运行的异步请求
    • runningSyncCalls:正在运行的同步请求

    getResponseWithInterceptorChain中拦截器的工作分析

    链的工作流程:
    1、在getResponseWithInterceptorChain创建链条,并执行proceed方法 (图2所示)
    2、在链条的proceed方法中,取出拦截器,并调用拦截器的intercept方法(图3所示)
    3、intercept方法中,对请求进行处理,然后通过链条的proceed获取返回(图4所示)
    4、此时的链条的index已经加1,proceed中拿到下一个拦截器,然后执行第3步;如此递归到最后一个拦截器执行第5步
    5、最后一个拦截器获取到返回之后,依次递归,每个拦截器去处理返回的response,然后返回给上一个拦截器处理
    6、执行到最后回到第一个链的起点,把数据返回给对应的调用(图2的retrun)

    图2:创建链并开始执行的代码 图3:proceed方法的主要代码 图4:Interceptor的intercept方法
    对于每个拦截器的功能可以查看上一篇文章OKHttp -- 结构分析

    相关文章

      网友评论

          本文标题:OKHttp -- 工作流程分析

          本文链接:https://www.haomeiwen.com/subject/tdljzxtx.html