Volley原理总结

  1. 通过Volley.newReuqestQueue新建一个请求队列,在创建请求队列的时候,会在后台开启5个线程,一个是缓存线程,4个网络请求的线程。

  2. 当我们往队列中加入request的时候,会检查request是否可以被缓存,默认情况下是可以的,如果用户设置了不可以被缓存,那么会直接将request加入到网络请求的队列当中。

  3. 如果可以被缓存,且如果没有相同的request正在请求,那么会将request加入到缓存队列,并在一个Hashmap中加入该Request的key,value为null。如果在Request请求的过程中,有相同的Request到来,那么会将这些新的Request通过链表连接,放入到Hashmap的value中。等待正在请求的Request完成之后,会将这些相同的Request全部取出,加入到缓存队列。

  4. 那么会判断是否已经有相同key的request正在请求,用于比较的数据结构是HashMap,其中key是request的key(method+url),value是Request的链表。如果有的话会将request加入Hashmap的链表之中,链表存放的是具有相同key的request。

  5. 缓存线程会不断从缓存队列中取出request,并查看是否已经有了缓存,如果有缓存并且缓存还没有过期,则会将response分发到主线程中进行回调,采用的是handler机制发送到主线程

  6. 如果缓存过期了,那么会将request加入到网络请求队列之中。网络请求线程会从网络请求队列中取出request,进行网络请求,请求完成之后会将结果进行缓存,并将结果传回主线程

  7. request完成的时候将保存在hashmap中的具有相同key的request取出来,全部加入到缓存队列,由于刚刚才完成对request的请求,所以缓存一般都是有效的,所以会直接把response分发给各个request对应的回调函数。

  8. 缓存是存在本地的,默认缓存大小是5M,如果缓存满了,会通过FIFO算法,将老的缓存进行删除。

以上就是本人对Volley的总结了,源码来来去去看了好几遍,总结一下比较好。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值