标签:
Volley作为2013年Google公司推出的一款面向android设备的网络开源框架,目前已被广泛的应用,优点是可扩展,缓存,dispatcher等。下面我们就简单根据调用的顺序,先聊聊到底Volley内部的运转流程是怎样的,用到了哪些设计模式,主要类有哪些有什么用以及有什么缺陷。
这一篇首先分析一下Volley内部的流转。
首先,我们在使用Volley时,要先调用
RequestQueue mQueue = Volley.newRequestQueue(this);这一部是生成了一个RequestQueue,内部是怎么走的呢?首先会调用重载函数,最后重载到了如下代码:
public static RequestQueue newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes)到这里面的方法会生成真正的requestQueue队列,这个方法内部主要做了以下几件事:
1)生成一个文件,这个文件是缓存文件,存放volley访问的数据进行缓存使用的:
File cacheDir = new File(context.getCacheDir(), "volley");//名字默认是Volley2)设置userAgent,这个userAgent在http请求头部存储,当HttpStack使用HttpClient时(SDK<9),会把这个userAgent信息用上。
try { String network = context.getPackageName(); PackageInfo queue = context.getPackageManager().getPackageInfo(network, 0); userAgent = network + "/" + queue.versionCode; } catch (NameNotFoundException var7) { ; }
if(stack == null) { if(VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } }我们在生成RequestQueue时,只传入了context,所以httpStack就用的默认的。如果想自己写一个,可以实现HttpStack然后生成RequestQueue时传入这个自己写的HttpStack即可。
4)实例化NetWork对象,这也是非常关键的一个类,进行网络访问的,然后把上一步的HttpStack对象传入。
BasicNetwork network1 = new BasicNetwork((HttpStack)stack);5)生成RequestQueue对象,如果构造RequestQueue时指定了最大缓存值,则指定最大缓存值,否则用默认的缓存值5MB
RequestQueue queue1; if(maxDiskCacheBytes <= -1) { queue1 = new RequestQueue(new DiskBasedCache(cacheDir), network1); } else { queue1 = new RequestQueue(new DiskBasedCache(cacheDir, maxDiskCacheBytes), network1); }6)调用queue.start()方法,然后将生成的requestQueue返回
queue1.start(); return queue1;
RequestQueue newRequestQueue(Context context)//不指定httpStack和缓存最大值用默认的 RequestQueue newRequestQueue(Context context, HttpStack stack)//指定HttpStack不指定缓存最大值 RequestQueue newRequestQueue(Context context, int maxDiskCacheBytes) //不指定HttpStack,指定缓存最大值 newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes)//都指定不论我们在构造RequestQueue时用了哪种方法,最后都会走向最后一种,并且再最后一种方法中做了6件事
1)生成缓存文件
2)指定UserAgent(SDK<9)
3)实例化HttpStack
4)实例化Network(BasicNetwok)
5)实例化RequestQueue
6)queue.start()并返回RequestQueue.
那么我们在使用请求时一般的写法是什么,这个内部又发生了什么?
HttpStack,Network,RequetQueue的作用分别是什么,queue.start()做了什么?这是后续要讲的
http://blog.csdn.net/szxgg/article/details/51346077
标签:
原文地址:http://blog.csdn.net/szxgg/article/details/51345859