Volley

原理:volley一共分为三个线程,主线程,缓存调度线程,网络调度线程,首先请求会加入到缓存队列,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程;如果缓存中没有找到结果,则把这条请求加入到网络队列中,然后发送http请求,解析响应并写入内存,并回调给主线程,这就是volley的底层框架原理

1.因为要创建RequestQueue mQueue = Volley.newRequestQueue(getapplicationcontext)

所以,我们要调用重载函数,一般是两个,我们调用带两个参数的函数或者三个参数的,

在函数中我们可以知道,当我们android的版本大于2.3则是调用httpurlconnection的hurlstack,否则是调用httpclient的httpclientstack

2.cachediapatcher是缓存调度线程,并调用了start方法,在循环中调用了networkdispatcher的start方法,networkdispatch则是网络调度线程,默认情况下,数量为4个,默认开启了4个网络调度线程,也就是说可以有5个在后台请求等待的到来,接着创键request和调用requestQueue的add方法

3.在add方法里我们会先判断该请求是否应该写入到缓存if(!request.shouldCache()),如果不应该就加入到网络调度线程,his.mWaitingRequests.containsKey(cacheKey),如果应该就判断之前缓存中是否有执行相同请求并没有返回结果,如果有就加入到mwaittingrequests队列中,不在做重复的重复的请求,如果没有则先加入到缓存调度的线程在加入到mwaittingrequests队列中,

4.在缓存调度线程,判断是否取消了,如果没有判断是否存在,如果存在判断是否过期都没有就加入到请求队列,解析并返回给主线程

5.在网络调度线程,判断是否取消了此请求,如果没有加入到队列中,请求解析,缓存,并回调给主线程

6.请求网络是调用的是mnetwork的方法prefromrrequest,因为mnerwork是一个接口,

7.当请求网络成功的时候,存在缓存中,并mDelivery.postResponse调用以上方法,又会调用ResponseDeliveryRunnable,在以上方法中调用mRequest.deliverResponse(this.mResponse.result),这个是实现了request抽象类必须实现的方法,this.mListener.onResponse(response),又调用了它,最后他中的Response.ListeneronResponse()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值