Volley 启动流程

本文详细介绍了Volley网络请求库的启动流程,包括RequestQueue的创建、缓存和网络线程的工作原理等关键步骤,揭示了Volley如何高效地处理HTTP请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Volley 启动流程:


1.调用Volley类中的静态方法:newRequestQueue 方法 创建RequestQueue 请求队列


2.newRequestQueue 方法:根据当前的API,来决定使用具体的HttpStack ,使用的是策略模式
如果大于9,则使用HTTPUrlConnection,如果小于9,则使用Apache HttpClient


3.Network network = new BasicNetwork(stack);


 RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir),network); //创建一个具体的请求队列 
 
 queue.start();  //启动RequestQueue


4.
mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery);mCacheDispatcher.start();


// Create network dispatchers (and corresponding threads) up to the pool size.
for (int i = 0; i < mDispatchers.length; i++) {
NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork,
mCache, mDelivery);
mDispatchers[i] = networkDispatcher;
    networkDispatcher.start();
}
同时启动线程:缓存线程CacheDispatcher、网络请求线程NetworkDispatcher(默认开启4个线程),其中两者共用mNetworkQueue队列


mDelivery指向的是 new ExecutorDelivery(new Handler(Looper.getMainLooper())),从而可以看出postResponse方法最后的执行都是在UI线程中


5.缓存线程run方法:
不断的while循环,从缓存队列中获取request对象 Request<?> request = mCacheQueue.take();


如果request cancel了,则finish不做任何的调度分发


如果没cancel,根据request的getCacheKey() 从cache中获取Cache.Entry 数据


如果获取到的entry为null,则将request加入到NetworkQueue中等待执行


如果获取到的entry过期了,则也会将request加入到NetworkQueue中


如果既不为null也没有过期,则执行request.parseNetworkResponse 获取Response对象


如果entry 不需要refresh,则直接执行交付操作:mDelivery.postResponse(request, response);


如果entry 需要refresh,继续执行mDelivery.postResponse,并在执行完之后通过mNetworkQueue.put(request); 加入到NetworkQueue中等待执行


6.网络请求线程run方法:
同缓存线程的run方法,相差不大,开头也是从mQueue不断的获取request对象


NetworkResponse networkResponse = mNetwork.performRequest(request);


然后通过mNetwork 执行performRequest ,去执行http请求 获取response


调用BasicNetWork中的performRequest方法 


在performRequest方法中,会调用具体的HttpStack 的 performRequest方法去执行http的请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值