zoukankan      html  css  js  c++  java
  • Volley框架的流程图分析

          接着上一篇Volley框架的使用,这一篇主要主要讲Volley框架运作的原理。主要使用流程图来叙述,简单的分析了整个流程的过程,具体的请参考源代码或者查看我上一篇在文章末尾添上的链接。

     

    一、Volley的准备

    生成一个RequestQueue的队列。

    二、用户添加Request

    三、阻塞线程

    (1)缓存队列处理器

    (2)网络请求处理器

    四、数据分发器

    作为网络回应的处理器

    五、总结

    1. 当一个RequestQueue被成功申请后会开启一个CacheDispatcher(缓存调度器)和4个(默认)NetworkDispatcher(网络请求调度器);

    2. CacheDispatcher缓存调度器最为第一层缓冲,开始工作后阻塞的从缓存序列mCacheQueue中取得请求:

      a. 对于已经取消了的请求,直接标记为跳过并结束这个请求
      b. 全新或过期的请求,直接丢入mNetworkQueue中交由N个NetworkDispatcher进行处理
      c. 已获得缓存信息(网络应答)却没有过期的请求,交由Request的parseNetworkResponse进行解析,从而确定此应答是否成功。然后将请求和应答交由Delivery分发者进行处理,如果需要更新缓存那么该请求还会被放入mNetworkQueue中

    3. 用户将请求Request add到RequestQueue之后:

      a. 对于不需要缓存的请求(需要额外设置,默认是需要缓存)直接丢入mNetworkQueue交由N个NetworkDispatcher处理;
      b. 对于需要缓存的,全新的请求加入到mCacheQueue中给CacheDispatcher处理
      c. 需要缓存,但是缓存列表中已经存在了相同URL的请求,放在mWaitingQueue中做暂时雪藏,待之前的请求完毕后,再重新添加到mCacheQueue中;

    4. 网络请求调度器NetworkDispatcher作为网络请求真实发生的地方,对消息交给BasicNetwork进行处理,同样的,请求和结果都交由Delivery分发者进行处理;

    5. Delivery分发者实际上已经是对网络请求处理的最后一层了,在Delivery对请求处理之前,Request已经对网络应答进行过解析,此时应答成功与否已经设定。而后Delivery根据请求所获得的应答情况做不同处理:

      a. 若应答成功,则触发deliverResponse方法,最终会触发开发者为Request设定的Listener
      b. 若应答失败,则触发deliverError方法,最终会触发开发者为Request设定的ErrorListener

    处理完后,一个Request的生命周期就结束了,Delivery会调用Request的finish操作,将其从mRequestQueue中移除,与此同时,如果等待列表中存在相同URL的请求,则会将剩余的层级请求全部丢入mCacheQueue交由CacheDispatcher进行处理。

    借用了该博客的总结(http://blog.csdn.net/airk000/article/details/39003587)

    ========================================

    作者:cpacm

    地址:http://www.cnblogs.com/cpacm/p/4211719.html

  • 相关阅读:
    Using X++ code direct execute to sql statement
    SysMultiTableLookup class
    Using X++ Modify Table and class name From AOT Project
    identify multiple selected records
    简单实用SQL脚本(转)
    FTK应用程序编程接口(API)手册1
    《那些年啊,那些事——一个程序员的奋斗史》——28
    ftk的python binding
    《那些年啊,那些事——一个程序员的奋斗史》——27
    好久没来,CSDN都改版了
  • 原文地址:https://www.cnblogs.com/cpacm/p/4211719.html
Copyright © 2011-2022 走看看