美文网首页
Volley源码分析

Volley源码分析

作者: 钟离四郎 | 来源:发表于2018-12-09 16:35 被阅读0次

    下面是Volley的基本用法:



    看到上图的第一步,创建请求队列,我们跟进去看看具体情况:


    接下去看上图标记A处:


    image.png

    看到上图的B处:
    创建了请求队列对象,然后调用了start方法,进去看下start方法如何工作吧:



    看上图D处:
    创建了一个CacheDispatcher对象,并调用了start方法,这哥们是啥玩意呢?实际上这哥们继承自Thread,进入查看呗:
    image.png

    所以CacheDispatcher调用了start方法之后,run方法会被调用:


    image.png

    上图中从缓存队列取出一个请求对象,然后在调用processRequest,至于缓存队列是什么时候入队一个值的这里先存档下文在讨论,先标记D1吧:
    image.png

    看到标记D2,mDelivery对象是ResponseDelivery,本身ResponseDelivery是一个接口,往后追踪到这里:



    可见这兄弟是ExecutorDelivery,哎呦,创建这个对象还传了一个handler(在主线程处理消息的),所以上文mDelivery.postResponse其实是ExecutorDelivery的postResponse方法,我们可以猜猜看,这个方法里面通过Handler来传递Response???是这样吗,进去看看:

    看到上面两图,也基本证实上面的猜想,继续如下:



    看到上图,继续D3:



    回顾上文分析情况,到这里我们先总结一下:
    创建请求队列的时候,会创建一个CacheDispatcher线程,在这个线程中首先会从缓存队列去一个请求,然后看看时候命中缓存,命中则返回结果,不命中则将请求加入网络请求队列,等候执行网络请求。

    除了创建CacheDispatcher线程以外,还会创建多条(默认4条)NetWorkDispatcher线程,这个线程当然是来执行网络请求的啦:


    image.png
    image.png
    image.png

    到这里最主要的请求如何调度,以及响应结果如何传递,剩下没有分析的只有文章开头的第三部,请求入队:



    好啦,上面代码很简单,到此Volley源码分析完毕,其实也是比较简单的,看到Volley源码后也是很佩服作者的设计的,哈哈,一个活生生的多线程编程,在最后总结之前邀请你欣赏一张图:



    这张图是官网介绍Volley的工作流程的,很牛逼有木有,通过上文的分析此图应该是很容易阅读理解的。。。

    总结

    Volley在创建请求队列的时候会创建一个CacheDispatcher线程和多条NetWorkDispatcher线程(默认4条),CacheDispatcher线程会从缓存队列取出一个请求检查是否缓存命中,命中则通过回调返回结果,没有命中则将请求加入网络请求队列。而NetWorkDispatcher线程则从网络请求队列中获取一个请求,执行网络请求,然后根据具体需要判断是否缓存并返回结果。

    相关文章

      网友评论

          本文标题:Volley源码分析

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