Volley源码学习笔记_ExecutorDelivery
2017-06-07 18:22
316 查看
Volley源码学习笔记_1简单介绍了RequestQueue以及BasicNetWork。这里看一下ExecutorDelivery。
ExecutorDelivery的run方法
以上。
ExecutorDelivery的作用
ExecutorDelivery是用来通信,使用的是Handler。它实现了ResponseDelivery接口。ResponseDelivery有3个方法。参数是Request,Response以及一个Runnable接口。这里的Request是用户创建的请求,response是用户请求回来的数据或者VollerErroy,Runnable是用来给Handler处理消息的。void postResponse(Request<?> var1, Response<?> var2); void postResponse(Request<?> var1, Response<?> var2, Runnable var3); void postError(Request<?> var1, VolleyError var2);
ExecutorDelivery接口的具体实现
public void postResponse(Request<?> request, Response<?> response) { this.postResponse(request, response, (Runnable)null); } public void postResponse(Request<?> request, Response<?> response, Runnable runnable) { //请求已经发送过响应对象让Request的mResponseDelivered变为true,表示已经请求过 request.markDelivered(); //VolleyLog的tag request.addMarker("post-response"); //执行ResponseDeliveryRunnable更新消息 this.mResponsePoster.execute(new ExecutorDelivery.ResponseDeliveryRunnable(request, response, runnable)); } public void postError(Request<?> request, VolleyError error) { request.addMarker("post-error"); Response response = Response.error(error); this.mResponsePoster.execute(new ExecutorDelivery.ResponseDeliveryRunnable(request, response, (Runnable)null)); }
ResponseDeliveryRunnable的具体实现
我们都知道Handler处理消息的时候回进行判断如下,msg.callback就是一个Runnable 接口,mCallback是自己的接口,里面就是我们经常看到的handleMessage(Message msg)... public interface Callback { public boolean handleMessage(Message msg); } ... public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } }
ExecutorDelivery的run方法
//请求取消,移除队列 if(this.mRequest.isCanceled()) { this.mRequest.finish("canceled-at-delivery"); } else { //请求成功,执行Request的deliverResponse并且将请求结果传过去 if(this.mResponse.isSuccess()) { this.mRequest.deliverResponse(this.mResponse.result); } else { //请求失败,执行deliverError,将错误信息传递过去 this.mRequest.deliverError(this.mResponse.error); } //response待完成,这个标志位的值在CacheDispatcher中设置改变 if(this.mResponse.intermediate) { this.mRequest.addMarker("intermediate-response"); } else { this.mRequest.finish("done"); } //执行 if(this.mRunnable != null) { this.mRunnable.run(); } }
以上。
相关文章推荐
- Volley源码学习笔记_CacheDispatcher和NetworkDispatcher
- Volley源码学习笔记_Request
- Volley源码学习笔记_RequestQueue和BasicNetWork
- pytorch学习笔记(十四): DataLoader源码阅读
- Hadoop源码学习笔记(3) ——初览DataNode及学习线程
- Ubuntu14.04_ROS学习笔记(5)Zumy小车源码注释
- zepto源码--核心方法6(显示隐藏)--学习笔记
- StringBuilder源码学习笔记
- Spark学习笔记(11)源码解读之Driver中的ReceiverTracker架构
- opencv中HOG源码学习笔记
- JAVA虚拟机源码学习笔记之二
- TensorFlow学习笔记之源码分析(3)---- retrain.py
- 学习笔记 《鸟哥的私房菜——软件安装:源码和Tarball》
- Linux内核学习笔记2——Linux内核源码结构
- zepto源码--核心方法7(管理包装集)--学习笔记
- Linux学习笔记(搭建本地源,源码安装)
- LinkedList<E>源码学习笔记
- Spring源码学习笔记(三)AOP实现
- linux块设备驱动学习笔记(源码适用高版本内核)