本次编写的Volley教程现在看来其实已经跟不上时代了,但是技术总有它光辉的一面。所以想和大家一起通过源码解析的方式学习优秀开源项目的精髓。
本次教程将先会和大家一起了解一下Volley的前世今生,摸清他的底细之后再学会如何使用,我已经做好一个Volley的Sample了,欢迎你star或者fork,最后才从源码的角度上来分析Volley的工作流程。
网上关于Volley的文章很多,但是反复看了很久,值得推荐的依旧是郭霖的文章,写的真心不错。我也借鉴了他的很多思路,不过也做了修改,希望大家一起学习。
Android Volley完全解析(一),初识Volley的基本用法
Android Volley完全解析(二),使用Volley加载网络图片
Android Volley完全解析(三),定制自己的Request
Android Volley完全解析(四),带你从源码的角度理解Volley
Android官方Volley教程(英文好的同学可以自学)
Volley的Github主页
瞧瞧Volley是何物
Volley简介
Google在2013年的I/O大会上(是的今年的IO大会很快就会发布android8.0了)正式发布了Volley,google官方称Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
Volley名称的由来是:1
2a burst or emission of many things or a large amount at once.
突然或大量的东西或大量的一次。
别想歪了哦😏,所以顾名思义,Volley特别适合数据量不大但是通信频繁的场景。
Volley的用武之地
Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
Volley提供给我们的功能
- Json,图像等异步下载
- 网络请求的排序(scheduling)
- 网络请求的优先级处理
- 缓存
- 多级别取消请求
- 和 Activity 的生命周期联动(Activity 结束时同时取消所有网络请求)
Volley的优点
- 非常适合进行数据量不大,但通信频繁的网络操作
- 可直接在主线程调用服务端并处理返回结果(这一点可以很方便的更新UI)
- 可以取消请求,容易扩展,面向接口编程
- 网络请求线程NetworkDispatcher默认开启了4个和1个CacheDispatcher总共5个线程
- 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
- 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理,缓存机制的支持等。并支持重试及优先级定义
- 默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现
Volley的缺点
- 使用的是httpclient、HttpURLConnection
- 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar
- 对大文件下载 Volley的表现非常糟糕
- 只支持http请求
- 图片加载性能一般
- 最重要的一点就是现在已经过时了,已经有其他诸如okhttp等优秀开源框架可以代替
最后先给大家看一下最终程序的运行效果