Volley框架源码详细解析

作为android开发者,volley这个框架应该不陌生,它有很多优点。比如通信速度快,代码编写简单,能取消请求,能并发,能缓存等等。

volley为什么这么好用呢,今天我们来看看源码,分析分析原理。

从使用开始说起,分三步:

1.RequestQueue queue = Volley.newRequestQueue(this);

2. StringRequest sq =new StringRequest();

3. queue.add(sq);

首先看第一步,Volley.newRequestQueue,这儿主要干了三件事儿,第一是实例化网络请求类BasicNetwork,第二是实例化一个CacheDispatcher,第三是实例化4个NetworkDispatcher。CacheDispatcher继承自线程,有一个while(true)的死循环,会一直等待缓存队列中新的请求出现,一旦出现新请求,那么就会查看该请求是否存在于缓存,若不存在,则将该请求加入网络请求队列,若存在,那么判断缓存是否超时,若没超时,则直接取出缓存,并解析和通知主线程处理,若超时,则加入网络请求队列。NetWorkDispatcher也继承自线程,类似于CacheDispatcher,也有一个while(true)死循环,一直等待网络请求队列中心的请求出现,一旦出现,则执行网络请求操作,请求成功则解析和通知主线程处理,并加入缓存。若请求失败则通知主线程请求失败了。

再看第二步,StringRequest 继承自Request类,Request类重点关注两个方法,deliverResponse方法和parseNetworkResponse,deliverResponse它内部调用了mListener.onResponse(response)方法,而这个方法正是我们在写一个请求的时候,添加的listener所重写的onResponse方法,也就是说,响应成功后在这里调用了onResponse()方法。接着看pareNetworkResponse方法,可以看出这里主要是对response响应做出一些处理。可以对比一下不同请求类的这个方法,都会不同的,所以说,这个方法是针对不同的请求类型而对响应做出不同的处理。比如说,如果是StringRequest,则将响应包装成String类型;如果是JsonObjectRequest,则将响应包装成JsonObject。

第三步,queue.add,这儿会先判断请求是否是缓存的,若不是,则直接加入网络请求队列,就完了。若是缓存的,那么就加入缓存对了。

更多细节请到这儿观看

https://www.jianshu.com/p/15e6209d2e6f

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值