您的位置:首页 > 其它

Volley源码学习笔记_ExecutorDelivery

2017-06-07 18:22 316 查看
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的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();
}

}


以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: