android中volley框架源码解析
2015-08-24 16:41
621 查看
上次只是分享了volley框架的简单使用,现在是对volley源码的分析,下面是个人对volley框架的理解,让我一点点介绍。
下面这张图是volley总体的框架图,总共分成了五块,最主要的是处理请求的中央枢纽(requestQueue),当然其中还包括其他的一些,例如起新线程处理等,具体可以看下面的图。网络接口是主要用来发起网络请求的,network是一个接口,BasicNetwork是一个实现该接口的类,在处理请求的中央枢纽主要是通过该类来访问网络。存储Cache是将请求的结果存储在硬盘,是否存储是需要根据用户来定的,其中有字段来记录。请求Request是所有请求的父类,volley中总共提供了以下三种请求类型,当然用户也可以自定义request,只要继承Request父类即可,然后将request加入到requestQueue中即可,之后的事就不用担心了,这里JsonRequest还有两个子类,分别是JsonArrayRequest和JsonObjectRequest。volley的特色是加载图片,具体用法可以自行百度,这一块中主要的类是ImageLoader、ImageCache(这是一个接口),NetworkImageView是volley提供的自定义view,只要在xml文件中使用该view代替ImageView即可,因为该NetworkImageView也是继承ImageView。
这里是访问网络的具体的类,上面已经说明每个类的意义以及属性和操作。
下面主要是处理请求的中央枢纽,有具体说明。
该图是关于存储Cache的
该类是针对volley的特色来讲,最重要的是Imageloader,这个类相当于处理所有图片加载的中央枢纽,但是这个中央枢纽还是需要RequestQueue来辅助,因为总要访问网络的嘛。
如果有问题可以留言,有错误请提出哦!
在上面讲RequestQueue的图中,类中属性mDispatcher是默认大小为4的一个数组,数组中的每个元素都是一个NetworkDispatcher,关联的networkQueue都是同一个,都是从该networkQueue中读取request然后执行,那么为什么不能像cacheDispatcher只声明一个变量就好了。这里源代码的作者是想多个线程同时进行,加速网络访问的速度,比如在一开始我们立马加入4个Request到RequestQueue中,假设每个request访问的平均时间为100ms,如果只有一个networkDispatcher的话,那么就是需要4*100ms=400ms。如果有4个networkDispatcher的话,四个并行执行,只用100ms就可以结束访问并得到数据。
下面是源代码:
下面这张图是volley总体的框架图,总共分成了五块,最主要的是处理请求的中央枢纽(requestQueue),当然其中还包括其他的一些,例如起新线程处理等,具体可以看下面的图。网络接口是主要用来发起网络请求的,network是一个接口,BasicNetwork是一个实现该接口的类,在处理请求的中央枢纽主要是通过该类来访问网络。存储Cache是将请求的结果存储在硬盘,是否存储是需要根据用户来定的,其中有字段来记录。请求Request是所有请求的父类,volley中总共提供了以下三种请求类型,当然用户也可以自定义request,只要继承Request父类即可,然后将request加入到requestQueue中即可,之后的事就不用担心了,这里JsonRequest还有两个子类,分别是JsonArrayRequest和JsonObjectRequest。volley的特色是加载图片,具体用法可以自行百度,这一块中主要的类是ImageLoader、ImageCache(这是一个接口),NetworkImageView是volley提供的自定义view,只要在xml文件中使用该view代替ImageView即可,因为该NetworkImageView也是继承ImageView。
这里是访问网络的具体的类,上面已经说明每个类的意义以及属性和操作。
下面主要是处理请求的中央枢纽,有具体说明。
该图是关于存储Cache的
该类是针对volley的特色来讲,最重要的是Imageloader,这个类相当于处理所有图片加载的中央枢纽,但是这个中央枢纽还是需要RequestQueue来辅助,因为总要访问网络的嘛。
如果有问题可以留言,有错误请提出哦!
在上面讲RequestQueue的图中,类中属性mDispatcher是默认大小为4的一个数组,数组中的每个元素都是一个NetworkDispatcher,关联的networkQueue都是同一个,都是从该networkQueue中读取request然后执行,那么为什么不能像cacheDispatcher只声明一个变量就好了。这里源代码的作者是想多个线程同时进行,加速网络访问的速度,比如在一开始我们立马加入4个Request到RequestQueue中,假设每个request访问的平均时间为100ms,如果只有一个networkDispatcher的话,那么就是需要4*100ms=400ms。如果有4个networkDispatcher的话,四个并行执行,只用100ms就可以结束访问并得到数据。
下面是源代码:
private NetworkDispatcher[] mDispatchers; public RequestQueue(Cache cache, Network network, int threadPoolSize,ResponseDelivery delivery) { mCache = cache; mNetwork = network; mDispatchers = new NetworkDispatcher[threadPoolSize]; mDelivery = delivery; } public RequestQueue(Cache cache, Network network, int threadPoolSize) { this(cache, network, threadPoolSize, new ExecutorDelivery(new Handler(Looper.getMainLooper()))); } public RequestQueue(Cache cache, Network network) { this(cache, network, DEFAULT_NETWORK_THREAD_POOL_SIZE); }所以如果没有具体指定大小的话,就是4个,这应该是源代码作者在考虑了访问性能和资源消耗之后才选择的值。
相关文章推荐
- android- monkey命令详解
- Android开发笔记一(hello world)
- Android线程和线程Handler基础一览
- Android ----waiting for debugger .
- Android线程和线程Handler基础一览
- android-resource-remover的研究和实验
- Android ViewPager使用详解
- Toolbar + drawerlayout 实现侧滑菜单
- Android 创建一个包含星期的格式字符串
- Android学习笔记(二)Manifest文件节点详解
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
- android 学习笔记 发送有序的广播
- Android的NDK开发(3)————JNI数据类型的详解
- ActiveAndroid 初学
- Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld
- Android的NDK开发(1)————Android JNI简介与调用流程
- 模糊背景处理--当前界面背景
- android 读取properties乱码,android studio开发
- android自带示例notepad学习笔记一
- Android 中的 EditText