Volley源码学习笔记_ExecutorDelivery

来源:互联网 发布:淘宝网小米max手机套 编辑:程序博客网 时间:2024/06/06 07:23

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

以上。

原创粉丝点击