基于”我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造”,我开始了我的拆轮子之旅。
从使用方法出发我带大家跟着我的思路分析一遍volley1.1.0的源码
|
|
RequestQueue 一个带有线程池调度的请求分派队列
StringRequest 请求的封装,将url的response body作为String返回
我们来逐行分析上面源码
|
|
传入了一个null的 BaseHttpStack 类
这里可见Volley的扩展性,可以修改网络传输层,例如扩展 OkHttpStack,用okHttp作为传输层。
再看 newRequestQueue(context, (BaseHttpStack) null)
|
|
HurlStack和HttpClientStack 都继承BaseHttpStack抽象类,发起Http请求,HurlStack使用HttpURLConnection执行网络请求,
HttpClientStack使用HttpClient执行网络。
HttpURLConnection比起HttpClient来说更加简单易用,修复了之前的bug。
从Android4.4开始HttpURLConnection的底层实现采用的okHttp。
BasicNetwork 通过对HttpStack的封装,执行网络请求, 看下调用的另一个重载的构造函数。
|
|
创建文件缓存路径,传入一个 DEFAULT_NETWORK_THREAD_POOL_SIZE 常量大小为4,顾名思义是默认网络线程池大小。
接着往下看
|
|
这里创建了一个ExecutorDelivery对象,利用Handler把结果回调到主线中。
后面用到时候再看具体实现
接着看上面构造函数中调用的 queue.start()
|
|