写在最前面的话:送给还在迷茫看不懂的童鞋,跟着我一步步看,小白也能看懂,从而对整体有一个把握,分析的开始以基本使用为切入点,一步步深入。
1. 创建获取
RequestQueue
对象
1 RequestQueue mQueue = Volley.newRequestQueue(this);
开始进入:::Vollery # newRequestQueue()
1 | public static RequestQueue newRequestQueue(Context context, HttpStack stack) { |
看到我开始罗列代码了,不要慌,还好不长,在能力范围内:
刚开始就根据不同的Android 系统版本,创建不同的对象,我们先可以大概了解一下 HurlStack
和 HttpClientStack
是啥?
HurlStack.java
1 | public class HurlStack implements HttpStack { |
HttpClientStack.java
1 | public class HttpClientStack implements HttpStack { |
HttpStack.java
1 | public interface HttpStack { |
看到这里我们大概明白了,原来是根据不同的系统版本,确定最终选择进行的网络请求,那为什么大于9 用 HttpUrlConnection
小于9用 HttpClient
呢?在这里不过多介绍了,网上一搜就知道了。
Ok,那我们继续向下走,回到上面的代码,为了方便查看,我重新粘贴一份代码下来:
1 | public static RequestQueue newRequestQueue(Context context, HttpStack stack) { |
Network.java
1 | public interface Network { |
哦 原来是接口,它的实现类 BasicNetwork
BasicNetwork.java
1 | public class BasicNetwork implements Network { |
目前而止,那么它们之间的关系是啥样的呢,我画了一张图:
很清晰吧,目前我们先不考虑这个 BasicNetwork
类中干了什么,我们先根据代码的思路一步步向下走,保证我们整体主干不变,避免陷入只见树木不见森林的局势。
Ok,我们再次回到原来的代码:
1 | public static RequestQueue newRequestQueue(Context context, HttpStack stack) { |
RequestQueue.java
1 | public RequestQueue(Cache cache, Network network) { |
在构造方法中,传入一个Cache
对象,network
对象,默认初始化一个threadPoolSize = 2
,还有一系列初始化操作.
Ok,再次返回我们之前的代码:
1 | .... |
RequestQueue#start()
方法了:
1 | public void start() { |
这里又创建了一个 CacheDispatcher
类。调用四个参数的构造方法。并调用了 start()
方法。
接下来,我们就认识下 CacheDispatcher.java
类:
1 | //原来它是一个线程 |
OK,返回到我们之前的操作:RequestQueue.java
1 |
|
循环遍历生成2 个 NetworkDispatcher
对象,并将 NetworkDispatcher
对象存储在一个 mDispatchers
的数组中去了,最后调用了 start
方法。
Ok,那接下来我们就看下这个 NetworkDispatcher.java
类了。
NetworkDispatcher.java
1 | public class NetworkDispatcher extends Thread { |
至此,对于RequestQueue
的初始化第一步我们完成了对它的了解,你明白了吗? 下一篇我们针对 mQueue.add(request)
真正需要进行网络请求进行继续分析。如果这篇文章有帮助到你,给个赞就是我最大的鼓励了,比心💗。