Volley框架个人心得体会

先上图:


主要特点:

(1)扩展性强。Volley 中大多是基于接口的设计,可配置性强
(2). 一定程度符合 Http 规范,请求头的处理缓存机制的支持等支持重试优先级定义
(3). 默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现。
(4). 提供简便的图片加载工具。

 

volley使用及其简单,我们只需要创建一个RequestQueue请求队列,然后往队列里面扔http请求即可,volley会不断从队列里面取出请求然后交给工作线程处理。

 

Request的使用分为三步:1.创建RequestQueue队列;2.创建Request对象,并加入队列中;3.处理回调事件。

 

首先我们从整体上把握volley的工作流程,抓住其主线。

(1)请求队列(RequestQueue)的创建

创建请求队列的工作是从Volley#newRequestQueue开始的,这个方法内部会调用RequestQueue的构造器,也就是一个工厂方法,这个工厂方法会指定一些基本配置,如缓存策略为硬盘缓存(DiskBasedCache),http请求方式为HttpURLConnection,默认线程池大小为4。

 

其中的ResponseDelivery是请求结果的分发器,它的实现是通过ExecutorDelivery来完成的,ExecutorDelivery通过创建Handler和UI线程的Looper将结果返回给主线程

 

之后,调用RequestQueue#start启动请求队列。

 

Start()方法创建了CacheDispatcher和4个NetworkDispatcher个对象,这个CacheDispatcher和NetworkDispatcher都是Thread的子类,其中CacheDispatcher处理走缓存的请求,而4个NetworkDispatcher处理走网络的请求

 

CacheDispatcher通过构造器注入了缓存请求队列(mCacheQueue),网络请求队列(mNetworkQueue),硬盘缓存对象(DiskBasedCache),结果分发器(mDelivery)。之所以也注入网络请求队列是因为一部分缓存请求可能已经过期了,这时候需要重新从网络获取。NetworkDispatcher除了缓存请求队列没有注入,其他跟CacheDispatcher一样。到这里RequestQueue的任务就完成了,以后有请求都会交由这些dispatcher线程处理。

(2)请求的添加

请求的添加是通过RequestQueue#add完成的,add方法的逻辑是这样的:

1.将请求加入mCurrentRequests集合

2.为请求添加序列号

3.判断是否应该缓存请求,如果不需要,加入网络请求队列

4.如果有相同请求正在被处理,加入到相同请求等待队列中,否则加入缓存请求队列。

 

(3)请求的处理

请求的处理是由CacheDispatcher和NetworkDispatcher来完成的,它们的run方法通过一个死循环不断去从各自的队列中取出请求,进行处理,并将结果交由ResponseDelivery

 

(4)请求结果的分发与处理

请求结果的分发处理是由ResponseDelivery实现类ExecutorDelivery完成的,ExecutorDelivery是在RequestQueue的构造器中被创建的,并且绑定了UI线程的Looper

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值