您的位置:首页 > 理论基础 > 计算机网络

Volley源码阅读详解(一)---网络任务分发,处理和交付的核心流程

2016-04-01 17:45 281 查看
我们用Volley框架处理网络任务的时候一般都是这样写的:

public void testVolley(){

RequestQueue mQueue = Volley.newRequestQueue(this.getApplicationContext());

StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});

mQueue.add(stringRequest);

}


看了Volley的源码之后大概画了一下网络任务的基本走向,如下图:



核心思路是通过两大类工作线程(CacheDispatcher和NetworkDispatcher)不断循环获取任务和维护两个队列(CacheQueue和NetworkQueue)来处理添加的多个网络请求。

主要核心步骤:

1,新增一个网络请求(request)后,该网络请求首先被添加到CacheQueue队列中

2,一个工作线程CacheDispatcher一直循环不停的去CacheQueue队列中获取网络请求(request),当没有网络请求(request)时就阻塞等待,当获取到网络请求(request)时先判断该请求结果是否有缓存,有缓存就直接交付结果,没有缓存就把网络请求(request)放进NetworkQueue队列,然后再继续循环

3,默认开启的四个工作线程NetworkDispatcher全都一直循环不停的去NetworkQueue队列获取网络请求(request),当没有网络请求(request)时就阻塞等待,当拿到网络请求(request)的工作线程NetworkDispatcher就根据网络请求(request)去网络请求数据,拿到数据后先缓存,然后交付结果,最后再继续循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: