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(); } }
以上。
阅读全文
0 0
- Volley源码学习笔记_ExecutorDelivery
- Volley源码学习笔记1
- Volley源码学习笔记_Request
- Volley源码学习笔记_RequestQueue和BasicNetWork
- Volley源码学习笔记_CacheDispatcher和NetworkDispatcher
- Volley 源码笔记(1)
- Volley 源码笔记(2)
- Volley源码笔记
- Volley源码学习
- Volley学习(一)Android Volley源码解析
- Volley学习笔记
- volley学习笔记
- volley学习笔记
- Volley学习笔记
- volley框架学习笔记
- Volley的学习笔记
- volley学习笔记
- Volley学习笔记
- nginx简易教程
- 我的高大上专有名词
- Deep Learning的学习实践 4 -- DBN
- jfreechart生成柱状图,x轴间隔显示
- 更新DNS修改host
- Volley源码学习笔记_ExecutorDelivery
- lua当作配置文件
- Android之视频播放使用MediaPlayer+SurfaceView代替ViedoView控件
- Oracle基础查询练习(三)
- C#4.0新特性
- 第5篇 RabbitMQ集成SpringBoot实现Direct模式
- 燕麦云何洋开讲|深度干货,顺丰阿里之争跟我有什么关系?
- Python中的全局sorted函数
- WebService(4):CXF Spring开发WebService,基于SOAP和REST方式