Volley源码学习笔记

xiaoxiao2021-02-28  70

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(); } }

以上。

转载请注明原文地址: https://www.6miu.com/read-57666.html

最新回复(0)