时间:2021-05-20
概述
Volley是Google在2013年推出的一个网络库,用于解决复杂网络环境下网络请求问题。刚推出的时候是非常火的,现在该项目的变动已经很少了。项目库地址为https://android.googlesource.com/platform/frameworks/volley
通过提交历史可以看到,最后一次修改距离今天已经有一段时间了。而volley包的release版本也已经很久没有更新了。
authorJeffDavidson<jpd@google.com>SunMar1316:35:592016+0000虽然很久没有更新了,Volley始终是一个很好的网络框架,我们来分析一下volley的源码,更好的了解volley的使用场景,设计模式,还有存在的一些小问题,或者说使用不当出现的问题。
创建RequestQueue
下面的代码片段展示了建立一个RequestQueue需要的步骤:
// 使用 cache 和 network初始化 RequestQueuemRequestQueue = new RequestQueue(cache, network);// 启动队列mRequestQueue.start();String url ="http:///2011/09/androids-http-clients.html stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } }DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。
HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。不过在Android2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能。Android2.3版本之前HttpURLConnection存在bug不建议使用,而在Android2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。
目前来说,我们有一个更好的请求选择okhttp,volley源码中并没有封装它的请求,我们可以自己实现HttpStack接口,在performRequest使用okhttp请求。OkHttp相较于其它的实现有以下的优点:支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用户是透明的。利用响应缓存来避免重复的网络请求。当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。如果你的服务端有多个IP地址,当第一个地址连接失败时,OKHttp会尝试连接其他的地址,这对IPV4和IPV6以及寄宿在多个数据中心的服务而言,是非常有必要的。使用OkHttp作为替代是一个很好的选择。
缓存与线程处理
刚才说有4个默认线程是不准确的,是有4个NetworkDispatcher执行网络请求,还有一个CacheDispatcher缓存线程,本地缓存策略需要实现Cache接口,源码中有两个实现DiskBasedCache,NoCache,默认使用的是DiskBasedCache。我们可以根据自己的需要实现Cache接口。DiskBasedCache默认路径是app缓存目录下的volley,默认缓存5M,超出之后会覆盖旧数据。
Request类
Request类的子类相当于volley的输入,是创建请求的时候用的。JsonObjectRequest、JsonArrayRequest用来处理返回是json的数据,StringRequest处理stirng,ImageRequest用来处理图片。
Volley其实是一个生产者和消费者系统,调用方是生产者,而Volley是消费者。调用方通过RequestQueue生产Request,而Vollery消费Request从而得到Response。那么负责调配这些生产者和消费者的就是Dispatcher,分别是Cache和Network的Dispatcher。
总结
以上就是本文关于Volley源码之使用方式和使用场景详解的全部内容,希望对大家有所帮助。如有不足指出,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
函数防抖和节流都是对高频动作触发回调函数的一个优化,实现方式上有类似之处。先从使用场景做个区分。防抖使用场景:表单输入框校验提交按钮避免重复提交节流使用场景:s
golang里出现多goroutine的场景很常见,最常用的两种方式就是WaitGroup和Context,今天我们了解一下Context的应用场景使用场景场景
1、应用场景使用ElementUI实现一个输入框,输入100,下方显示10000。2、实现源码(1)主页面{{oldData|Power}}(2)JavaScr
本文实例讲述了Python面向对象之私有属性和私有方法。分享给大家供大家参考,具体如下:01.应用场景及定义方式应用场景在实际开发中,对象的某些属性或方法可能只
0x00:前言参考之前的《MyBatis中SqlMapConfig配置文件详解》记了一下MyBatis中的核心配置文件各个标签的作用和使用场景,这篇文章细说一下