Volley整体框架简介
队列分发器执行流程
CacheDispatcher流程
缓存分发器,在RequestQueue.start()时,就会在App中启动Thread专门用于处理缓存读取操作。读取缓存的关键操作流程伪代码如下:
while(ture){
request = mCacheQueue.take();
//判断请求是否已取消
//如果有缓存 --> 判断缓存是否过期 --> 缓存有效 --> 跳过网络请求,直接解析数据,完成请求
//如果无缓存,缓存过期等情况 --> 将请求添加到mNetworkQueue队列中,等待网络请求
}
NetworkDispatcher流程
网络分发器,在RequestQueue.start()时,就会在App中创建4个NetworkDispatcher对象,并创建4个Thread线程,用于处理网络请求操作。进行网络请求的关键流程伪代码如下:
while(ture){
request = mNetworkQueue.take();
//判断请求是否已取消
//调用Network对象进行Http请求操作
//调用Request中的parseNetworkResponse()操作来解析数据
//判断Response是否需要进行缓存,通过Cache实现类将Response缓存起来
//通过Delivery实现类,向UI线程发送请求完毕的消息
}
网络操作
BasicNetwork流程
//相对于Volley而言的请求层,为真正网络请求和Volley网络请求之间的中间层
performRequest(){
//设置请求头
//调用mHttpStack.performRequest()进行网络请求
//解读Http返回码(302,202等)根据这些对应Code进行对应处理
//调用entityToBytes(),将请求结果转化为byte[]数据
//返回NetworkResponse请求结果对象
}
HUrlStack流程
//真正的网络请求对象,根据不同的系统,提供不同的实现,也可以自行实现改请求操作
performRequest(){
//重写URL
//使用系统原生的HttpURLConnection来实现网络请求操作
//组装数据并返回给BasicNetwork对象
}
数据解析
Request
Request为抽象类,存在两个抽象方法,子类必须实现,如下:
parseNetworkResponse() //解析数据
deliverResponse() //分发请求结果
StringRequest
StringRequest为Request的子类,实现了上述两个抽象方法,如下:
parseNetworkResponse() {
//将byte[]按照Request要求的格式,进行转化
}
deliverResponse() {
//分发请求给mListener
}
参考
Volley请求整个顺序流程:https://blog.csdn.net/guolin_blog/article/details/17656437