前面几篇通过源码分析了Volley是怎样进行请求调度及请求是如何被实际执行的,这篇最后来看下请求结果是如何交付给请求者的(一般是Android的UI主线程)。

类图:

aaarticlea/png;base64,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" alt="" />

请求结果的交付是通过ResponseDelivery接口完成的,它有一个实现类ExecutorDelivery, 主要有postResponse()与postError()两个方法,分别在请求成功或失败时将结果提交给请求发起者。

1. 首先,在NetworkDispatcher的run()方法中,当服务器返回响应并解析完后,会调用mDelivery.postResponse(request, response);来提交请求响应。

  @Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Request<?> request;
while (true) {
try {
// Take a request from the queue.
request = mQueue.take();
} catch (InterruptedException e) {
// We may have been interrupted because it was time to quit.
if (mQuit) {
return;
}
continue;
} try {
request.addMarker("network-queue-take"); // If the request was cancelled already, do not perform the
// network request.
if (request.isCanceled()) {
request.finish("network-discard-cancelled");
continue;
} addTrafficStatsTag(request); // Perform the network request.
NetworkResponse networkResponse = mNetwork.performRequest(request);
request.addMarker("network-http-complete"); // If the server returned 304 AND we delivered a response already,
// we're done -- don't deliver a second identical response.
if (networkResponse.notModified && request.hasHadResponseDelivered()) {
request.finish("not-modified");
continue;
} // Parse the response here on the worker thread.
Response<?> response = request.parseNetworkResponse(networkResponse);
request.addMarker("network-parse-complete"); // Write to cache if applicable.
// TODO: Only update cache metadata instead of entire record for 304s.
if (request.shouldCache() && response.cacheEntry != null) {
mCache.put(request.getCacheKey(), response.cacheEntry);
request.addMarker("network-cache-written");
} // Post the response back.
request.markDelivered();
mDelivery.postResponse(request, response);
} catch (VolleyError volleyError) {
parseAndDeliverNetworkError(request, volleyError);
} catch (Exception e) {
VolleyLog.e(e, "Unhandled exception %s", e.toString());
mDelivery.postError(request, new VolleyError(e));
}
}
}

2. 看ExecutorDelivery中postResponse()方法的具体实现。其中mResponsePoster是一个Executor。每post一个response,都会调用ResponseDeliveryRunnable的run()方法。在这个run()方法中,会通过mRequest.deliverResponse(mResponse.result)来传递response的result,这个result其实就是已经解析好的响应结果,比如一个表示处理结果的字符串或一个User对象。

 @Override
public void postResponse(Request<?> request, Response<?> response) {
postResponse(request, response, null);
} @Override
public void postResponse(Request<?> request, Response<?> response, Runnable runnable) {
request.markDelivered();
request.addMarker("post-response");
mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable));
} /**
* A Runnable used for delivering network responses to a listener on the
* main thread.
*/
@SuppressWarnings("rawtypes")
private class ResponseDeliveryRunnable implements Runnable {
private final Request mRequest;
private final Response mResponse;
private final Runnable mRunnable; public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) {
mRequest = request;
mResponse = response;
mRunnable = runnable;
} @SuppressWarnings("unchecked")
@Override
public void run() {
// If this request has canceled, finish it and don't deliver.
if (mRequest.isCanceled()) {
mRequest.finish("canceled-at-delivery");
return;
} 38 // Deliver a normal response or error, depending.
39 if (mResponse.isSuccess()) {
40 mRequest.deliverResponse(mResponse.result);
41 } else {
42 mRequest.deliverError(mResponse.error);
43 } // If this is an intermediate response, add a marker, otherwise we're done
// and the request can be finished.
if (mResponse.intermediate) {
mRequest.addMarker("intermediate-response");
} else {
mRequest.finish("done");
} // If we have been provided a post-delivery runnable, run it.
if (mRunnable != null) {
mRunnable.run();
}
}
}

3. 既然是通过Request的deliverResponse()来传递响应结果,就来看下这个方法, 第二篇中已经知道这个方法是个抽象函数,由它子类来实现。以第一篇中的MyGsonRequest为例,其实现很简单,就是调用了mListener的onResponse方法。

 @Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}

这个mListener就是在主线程实例化MyGsonRequest的时候,传过来的一个Response.Listener<T>实例,这是MyGsonRequest的构造函数:

 public MyGsonRequest(int method
, String url
, Object requestBody
, Class<T> responseClass
, Listener<T> listener
, ErrorListener errorListener) { super(method, url, errorListener);
this.mRequestBody = requestBody;
this.mResponseClass = responseClass;
this.mListener = listener;
mGson = new Gson(); }

这里mListener也就是第一篇中在主线程中通过createRegisterSuccessListener函数返回的监听器实例,如下代码所示。  所以最终会调到这里的onResponse()方法,来做一些更新UI或提示用户请求成功之类的操作。请求失败时,响应错误结果的提交与之类似。这样,Volley就完成了响应结果的交付。

 private Listener<String> createRegisterSuccessListener() {
return new Listener<String>() {
@Override
public void onResponse(String response) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
Toast.makeText(
RegisterActivity.this,
getString(R.string.msg_register_success),
Toast.LENGTH_SHORT).show(); }
};
}

这里还有一个问题, 因为更新UI的操作只能在主线程中进行,那么ResponseDeliveryRunnable的run()方法不能再新起一个线程来执行,而应该在主线程中执行,这个是如何做到的?

其实还是用的Handler,Looper,MessageQueue的那套机制。 在Volley初始化一个RequestQueue的时候,会调用RequestQueue的如下构造函数,它构建了一个ExecutorDelivery对象,并把一个与主线程的Looper关联的一个Handler,

 public RequestQueue(Cache cache, Network network, int threadPoolSize) {
this(cache, network, threadPoolSize,
new ExecutorDelivery(new Handler(Looper.getMainLooper())));
}

然后再看下ExecutorDelivery的构造方法, 通过handler的post方法,把ResponseDeliveryRunnable 这个runnable加到了主线程的消息队列中,所以它的run()方法是在主线程中执行的。

     public ExecutorDelivery(final Handler handler) {
// Make an Executor that just wraps the handler.
mResponsePoster = new Executor() {
@Override
public void execute(Runnable command) {
handler.post(command);
}
};
}

到这里,Volley的源码基本上看完了。 还有一些诸如NetworkImageView控件(这个挺好用,直接可以取代ImageView),以及Cache的一些实现,有时间再具体看看。

[Android]Volley源码分析(五)的更多相关文章

  1. Android Volley源码分析

    今天来顺手分析一下谷歌的volley http通信框架.首先从github上 下载volley的源码, 然后新建你自己的工程以后 选择import module 然后选择volley. 最后还需要更改 ...

  2. [Android]Volley源码分析(三)

    上篇看了关于Request的源码,这篇接着来看下RequestQueue的源码. RequestQueue类图:

  3. [Android]Volley源码分析(二)

    上一篇介绍了Volley的使用,主要接触了Request与RequestQueue这两个类,这篇就来了解一下这两个类的具体实现. Request类图:

  4. [Android]Volley源码分析(四)

    上篇中有提到NetworkDispatcher是通过mNetwork(Network类型)来进行网络访问的,现在来看一下关于Network是如何进行网络访问的. Network部分的类图:

  5. [Android]Volley源码分析(一)

    一. 如何使用Volley? 1. 首先定义一个RequestManager类,用来在Android程序启动时对Volley进行初始化.RequestManager为单例类,因为只有在程序启动时调用, ...

  6. Volley源码分析(五)Volley源码总结篇

    volley关键的代码这里已经分析完了,下面梳理一下完整的Volley流程 Volley的使用从构造Request对象开始,Volley默认提供了四种request的实现,StringRequest, ...

  7. Android Volley源码分析及扩展

    转载请标明出处: http://www.cnblogs.com/why168888/p/6681232.html 本文出自:[Edwin博客园] Volley 介绍 Android系统中主要提供了两种 ...

  8. Volley源码分析(2)----ImageLoader

    一:imageLoader 先来看看如何使用imageloader: public void showImg(View view){ ImageView imageView = (ImageView) ...

  9. Android Choreographer 源码分析

    Choreographer 的作用主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整, ...

随机推荐

  1. Play Framework 完整实现一个APP(六)

    需要为Blog添加 查看和发表评论的功能 1.创建查看功能 Application.java中添加 show() 方法 public static void show(Long id) { Post ...

  2. Redis 使用说明 安装配置 主从复制

        开机加自启动: echo "redis-server /etc/redis.conf" >>/etc/rc.local    以前有想过用 Memcache 实 ...

  3. .NET 缩略图服务器 ResizingServer

    之前写过一篇文章 .NET 响应式自动缩略图服务器 之后对此Image Server又进行了基于ImageResizer的改写 基于.NET 图片服务器 支持缩略图格式 基于 ImageResizer ...

  4. WPF系列 Style

        参考 WPF: Customize your Application with Styles and Control Templates (Part 2 of 2)

  5. c++适配器

    容器适配器是是标准库中通用的概念,包括容器适配器.迭代器适配器和函数适配器,本质上,适配器是使一种事物的行为类似于另一种事物的的行为的一种机制,容器适配器使一种已经存在的容器类型采用另一种不同的抽象类 ...

  6. WinCE非通用调试工具汇总

    WinCE-IIC调试助手(S3C2410) http://www.cnblogs.com/we-hjb/archive/2008/10/19/1314562.html WinCE下音频频谱显示(TD ...

  7. COGS247. 售票系统[线段树 RMQ]

    247. 售票系统 ★★☆   输入文件:railway.in   输出文件:railway.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...

  8. 玩转Unity资源,对象和序列化(下)

    本文将从Unity编辑器和运行时两个角度出发,主要探讨以下两方面内容:Unity序列化系统内部细节以及Unity如何维护不同对象之间的强引用.另外还会讨论对象与资源的技术实现差别. 译注:除非特别说明 ...

  9. load和get的延迟加载

    load和get方法的区别: Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象. 区别在于: 如果未能发现符合条件的记录,get方法返回nul ...

  10. Android 从网络中获取数据时 产生部分数据乱码的解决

    产生部分数据乱码的解决 标签: android部分中文乱码 2014-04-12 23:24 12366人阅读 评论(10) 收藏 举报 分类: [Android 基础](15) 版权声明:本文为博主 ...