Android:谷歌Volley网络框架讲解——第一篇

 转至:http://www.cnblogs.com/bvin/p/3253544.html

 

 Volley主页 https://android.googlesource.com/platform/frameworks/volley

 http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded

Volley详细解析:http://www.cnblogs.com/bvin/category/485718.html

今年的谷歌IO大会上,谷歌推出了自己的网络框架——Volley。

1. 什么是Volley

在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图

这个框架对网络请求数据缓存做了很多优化,


2.  梳理一下网络请求的过程:

先看一段网络请求的代码吧

复制代码
mQueue = Volley.newRequestQueue(getApplicationContext());
        //StringRequest四个构造参数分别是Request类型,url,网络请求响应监听器,错误监听器
        mQueue.add(new StringRequest(Method.GET, "http://www.baidu.com/", new Listener(){

            @Override
            public void onResponse(String arg0) {
                // TODO Auto-generated method stub
                Log.e("onResponse", arg0);
            }
            
        }, new ErrorListener(){

            @Override
            public void onErrorResponse(VolleyError arg0) {
                // TODO Auto-generated method stub
                Log.e("onErrorResponse", arg0.toString());
            }
            
        }));
        mQueue.start();
复制代码

Volley

首先,通过Volley的静态方法new一个请求队列,再调用请求队列(RequestQueue是由缓存和网络线程构造的)的start方法。

然后,得到一个RequestQueue请求队列时,就添加一个请求Request,Volley提供有三种请求的封装,一个是StringRequest,一个事ImageRequest,还有一个是JsonRequest。

最后,调用RequestQueue的start方法就可以开始一条网络请求了。

可以看出Volley只是RequestQueue的一个helper。

 

RequestQueue

所以,这里一个最核心的就是RequestQueue请求队列这个了。

这个请求队列是有两个东西完成,一个是cache一个network。

这个RequestQueue的构造形式有四种:除了上面这两个还有线程池数量,响应委派。

1,public RequestQueue(Cache cache, Network network, int threadPoolSize,ResponseDelivery delivery)

2, public RequestQueue(Cache cache, Network network, int threadPoolSize)

3,public RequestQueue(Cache cache, Network network)

 

其实Cache和Network真正的工作者还是CacheDispatcher缓存调度和NetworkDispatcher网络调度。下期再详细讲解Dispatcher。。

RequestQueue的成员方法主要有下面几个:

 public void start();//请求队列开始进行调度发vgm

 public void stop();//队列退出调度

 public Request add(Request request);//添加一个请求,通过调用start()来执行

 void finish(Request request);//这个方法应该是释放请求资源的方法

 public void cancelAll();//取消当前的请求

 

NetworkDispatcher

这个就是网络调度的核心,这是一个继承Thread的类,构造方法如下

public NetworkDispatcher(BlockingQueue queue,Network network, Cache cache,ResponseDelivery delivery)

一个Request的队列,Network ,Cache ,ResponseDelivery 。。。

它的run()方法就是把请求队列取出一个Request,让Network 去执行一次请求再通过ResponseDelivery 进行解析。

Network

复制代码
public interface Network {
    
    public NetworkResponse performRequest(Request
 
 
 
 
修改:缓存使用的DiskBasedCache,默认大小5MB,默认缓存路径data/data/package/cache/volley下,修改缓存大小和路径使用下面代码
// File sdDir = Environment.getExternalStorageDirectory();//获取跟目录
// File file = new File(sdDir,"chen");
// DiskBasedCache cache = new DiskBasedCache(file, 20*1024*1024);
// Network network = new BasicNetwork(new HurlStack());
// queue = new RequestQueue(cache, network);
// queue.add(request);
// queue.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值