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

我们用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)去网络请求数据,拿到数据后先缓存,然后交付结果,最后再继续循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值