Volley源码阅读详解(一)---网络任务分发,处理和交付的核心流程
2016-04-01 17:45
281 查看
我们用Volley框架处理网络任务的时候一般都是这样写的:
看了Volley的源码之后大概画了一下网络任务的基本走向,如下图:
核心思路是通过两大类工作线程(CacheDispatcher和NetworkDispatcher)不断循环获取任务和维护两个队列(CacheQueue和NetworkQueue)来处理添加的多个网络请求。
主要核心步骤:
1,新增一个网络请求(request)后,该网络请求首先被添加到CacheQueue队列中
2,一个工作线程CacheDispatcher一直循环不停的去CacheQueue队列中获取网络请求(request),当没有网络请求(request)时就阻塞等待,当获取到网络请求(request)时先判断该请求结果是否有缓存,有缓存就直接交付结果,没有缓存就把网络请求(request)放进NetworkQueue队列,然后再继续循环
3,默认开启的四个工作线程NetworkDispatcher全都一直循环不停的去NetworkQueue队列获取网络请求(request),当没有网络请求(request)时就阻塞等待,当拿到网络请求(request)的工作线程NetworkDispatcher就根据网络请求(request)去网络请求数据,拿到数据后先缓存,然后交付结果,最后再继续循环
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)去网络请求数据,拿到数据后先缓存,然后交付结果,最后再继续循环
相关文章推荐
- TortoiseSVN 右键操作 出现SOAP 1.2 fault:SOAP-ENV:Sender[no subcode]"HttpSendRequest failed" Detail:无法与服务器建
- Java联网技术之一HTTP
- linux下的抓包工具tcpdump用法
- 配置高性能的http连接池
- C++ 用libcurl库进行http通讯网络编程
- linux网络流量监控工具
- linux网络基础
- RedHat 系统使用yum网络源
- Android 网络请求加密
- 关于配置httpd2.4.18+php5.6
- CHttpFile GET/POST 提交数据
- CentOS 网络地址设置
- HttpWebRequest用法实例
- iOS异步加载网络图片
- 关于网络通讯中的相关概念
- Android Volley完全解析(二),使用Volley加载网络图片
- xml数据作为表单参数在网络传递也需要用urlencode处理
- 基于TCP/IP 协议的简单C/S程序
- http://appxcode.com/index.php
- http压力测试工具