Volley网络请求框架源码解析

Volley网络请求框架源码解析
摘要由CSDN通过智能技术生成

Volley网络请求框架源码解析
Volley框架是谷歌公司于2013年推出的一款适用于请求数据量小,但拥有高并发特性的网络请求框架。通过观看以下这张图就可以看出,该框架比较适合处理请求数量小,但请求较为频繁,并发量比较大的应用场景。
这里写图片描述
Volley框架在使用时非常简单,仅需要三个步骤即可实现不同的请求操作,主要分为以下三个步骤。
第一步:创建RequestQueue请求队列,这是Volley框架的核心部分之一,关于这部分源码,将在后面进行详细介绍。
第二步:创建一个请求Request,在Volley框架中,提供了多种不同的请求类型,它们都是基于Request接口进行了封装,如StringRequest、JsonRequest、ImageRequest等等。
第三步:将创建出的Request,添加到RequestQueue队列中。仅需要这三个步骤,Volley框架便可以实现对客户端网络请求的分发、处理和反馈。
这里写图片描述
通过阅读上面这段打开可以看出,通过Volley进行网络请求时,完成RequestQueue队列创建后,只需要不断往这个队列中添加Request即可。
以下这张图是Volley框架的核心架构图,其中,这张图的红色方框部分,为Volley框架的核心层,接下来我们主要分析该框架的核心层代码部分。
这里写图片描述
一、Volley框架核心层代码解析
结合上面关于Volley框架的整体架构图可以看出,Volley框架执行的流程首先根据客户端添加到RequestQueue中的请求Request,然后分别由CacheDispatcher或NetWorkDispatcher处理客户端的请求,当完成请求的处理后,解析得到响应Response,最后由ExecutorDelivery将请求的处理结果Response,反馈给上层的调用者,这样一来,一个完整的Http请求就完成了。
首先我们分析Volley框架执行网络请求的第一步,RequestQueue请求队列的创建以及RequestQueue内部源码解析。
由于执行网络请求前,需要首先构建出RequestQueue,在Volley框架中,提供了用于构建RequestQueue的代码,客户端可以通过Volley中提供的newRequestQueue方法,构建出该队列,代码如下所示。
这里写图片描述
构建RequestQueue的方法如下所示,在该方法的最后几行代码中,首先构建了一个BasicNetWork,这个主要用于将网络请求的结果进行转换,暂且这里我们先不分析它。接下来通过实例化的方式创建了一个RequestQueue请求队列,并通过start方法将其启动,最后该方法将创建的这个RequestQueue反馈给了调用者,使调用者可以向RequestQueue中添加请求Request。
这里写图片描述
在该方法的前几行代码中,首先是客户端缓存的操作,接下来根据设备的SDK版本,使用了不同的网络请求方式,针对Android2.3以上的系统,则是通过HttpUrlConnection实现的网络请求操作;而针对Android2.3以下的系统,则是通过HttpClient实现的网络请求,这与Android系统有很大关系,在Android2.3以上的系统中,HttpClient会存在一些问题,所以,Volley框架在设计时,对于2.3以上的系统,就通过HurlStack对HttpUrlConnection进行封装,实现的网络请求处理。而对于Android2.3以下的系统,则是通过HttpClientStack实现的网络请求具体操作,其内部对HttpClient进行了一层包装。
在Volley框架中,关于Http网络协议层的封装设计,都是基于HttpStack这个接口展开的。由于在Android2.3以下的系统中,网络请求最终实现是通过HttpClient实现的;而在Android2.3以上的系统中,网络请求又是通过HttpUrlConnection实现的。所以,Volley框架通过这个HttpStack接口协议,分别实现了满足不同系统版本的HttpClientStack和HurlStack,以确保该框架对Android平台兼容性。
通过阅读HttpStack的接口描述可以看出,该接口是对Http请求协议的一个抽象封装,而下面的performRequest方法则是根据指定的请求Request以及请求头header,实现网络请求操作。由此可以看出,HttpStack接口的具体实现者,是实现网络请求的部分。
这里写图片描述
在HttpClientStack的源码中,查看构造方法可以看出,这里完成了HttpClient的初始化操作,而在HttpClientStack的performRequest方法中,最终是通过HttpClient执行execute方法实现的网络请求,而HttpClientStack中的HttpClient实例,则是Volley框架在执行RequestQueue创建时,传递进来的,代码如下所示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值