Volley源码学习笔记_1简单介绍了RequestQueue以及BasicNetWork。这里看一下ExecutorDelivery。
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.markDelivered();
request.addMarker(
"post-response");
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 {
if(
this.mResponse.isSuccess()) {
this.mRequest.deliverResponse(
this.mResponse.result);
}
else {
this.mRequest.deliverError(
this.mResponse.error);
}
if(
this.mResponse.intermediate) {
this.mRequest.addMarker(
"intermediate-response");
}
else {
this.mRequest.finish(
"done");
}
if(
this.mRunnable !=
null) {
this.mRunnable.run();
}
}
以上。