Volley学习记录

当你替换一个框架、使用一个框架的理由是什么呢?做了哪些准备和调研

性能上的优化
使用场景:
用retrofit来提高性能
Retrofit的高度封装和注解可以大大简化代码
AsyncTasks在多任务的时候表现乏力,速度慢。
包的体积

优点

  • 可直接在主线程调用服务端并处理返回结果。
  • 可以取消请求,容易扩展,面向接口编程。
  • 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
  • 支持请求优先级
  • 支持取消请求
  • 可以根据手机CPU调整调度器的个数

缺点

  • volley不适合上传下载大量文件,volley的request和response都是把数据放到byte数组里,不支持输入输出流。
  • 特别适合数据量小,通信频繁的网络操作。
  • 只支持https请求
  • 不支持401错误码。只考虑了statusCode(statusCode < 200 || statusCode > 299的情况。
功能点:
  • 取消请求机制

  • 取消队列机制

  • 缓存机制

  • 异常处理机制

  • 网络请求数据处理流程

  • 异常处理流程

  • Request类:
    1、分装请求参数
    2、封装结果回调监听(Listener)
    3、不同的Request子类类型重写解析函数,解析请求后的数据,
    4、把解析后的数据分发给Listener。
    5、优先级通过内部枚举Priority来定义
    6、是否缓存开关
    7、Request中的请求优先级机制:
    在Request对象加入到请求列队的时候会给Request对象设置一个squence序列号,通过AtomicInteger.incrementAndGet()来获取,然后加入到PriorityBlockingQueue,在加入的时候PriorityBlockingQueue会对实现了Compare接口的对象排序,Request实现了Compare接口,在Request的compareTo方法中的比较方式有两种,首先根据对Request设置的枚举Priority来判断,如果相等的话,就根据squence序列号来定义优先级规则
    8、重试策略RetryPolicy

  • NetworkDispathcer
    顾名思义“网络调度器”,Thread的子类,在RequestQueue创建的时候被创建,在RequestQueue的一个线程数组中存起来,然后全部初始化运行,在每个调度去的run()里面死循环从请求队列里面去取,如果队列没有数据就阻塞。
    干的事情:
    1、死循环从请求队列取东西。
    2、在请求之前request.isCanceled()检查request是否被取消。
    3、可以调用quit()方法退出调度器,中断线程。
    4、mNetwork.performRequest执行“真正的请求”返回NetworkResponse
    5、把NetworkResponse丢给Request去解析,这里给Request解析的好处是根据不同的Requsest返回不同类型的数据
    6、是否需要缓存
    7、mDelivery进行回调分发

  • Respose
    存储返回的结果、以及Request解析的数据类型。

  • NetworkResponse
    用来包装网络请求后的数据
    public final int statusCode;//用来保存返回码
    public final byte[] data;//保存服务器返回的二进制数据,这也是为什么不能下载大数据的原因,把数据都缓存在了数组。
    public final Map<String, String> header;//存放返回相应头
    public final boolean notModified;//是否被修改
    public final long networkTimeMs;//响应时间

  • Cache、Cache.Entry
    用来包装缓存的数据

  • HurlStack实行真正的请求,volley要实行高扩展很多都是对这个类进行的。
    1、UrlRewriter对url进行进一步的改造,这个类可以通过HurlStack的构造传递进来,在volley初始化的时候进行扩展。还可以定义SSLSocketFactory对https进行支持。
    2、openConnection()方法放回HttpURLConnection对象,是一个工厂方法,可以重写这个方法对Okhttp进行扩展。

  • HttpResponse、HttpResponse.HttpEntity
    这里用了apache的包,HttpResponse分装了请求的状态码,把connection的输入流inputStream、content-length、encoding封装起来返回交给给上一层,这里注意把inputStream抽取出来交给具体去处理非常灵活。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容