Android-Volley源码分析

Volley整体框架简介


队列分发器执行流程
CacheDispatcher流程

缓存分发器,在RequestQueue.start()时,就会在App中启动Thread专门用于处理缓存读取操作。读取缓存的关键操作流程伪代码如下:

while(ture){
    request = mCacheQueue.take();
    //判断请求是否已取消
    //如果有缓存 --> 判断缓存是否过期 --> 缓存有效 --> 跳过网络请求,直接解析数据,完成请求
    //如果无缓存,缓存过期等情况 --> 将请求添加到mNetworkQueue队列中,等待网络请求
}

NetworkDispatcher流程

网络分发器,在RequestQueue.start()时,就会在App中创建4个NetworkDispatcher对象,并创建4个Thread线程,用于处理网络请求操作。进行网络请求的关键流程伪代码如下:

while(ture){
    request = mNetworkQueue.take();
    //判断请求是否已取消
    //调用Network对象进行Http请求操作
    //调用Request中的parseNetworkResponse()操作来解析数据
    //判断Response是否需要进行缓存,通过Cache实现类将Response缓存起来
    //通过Delivery实现类,向UI线程发送请求完毕的消息
}


网络操作

BasicNetwork流程

//相对于Volley而言的请求层,为真正网络请求和Volley网络请求之间的中间层
performRequest(){
    //设置请求头
    //调用mHttpStack.performRequest()进行网络请求
    //解读Http返回码(302,202等)根据这些对应Code进行对应处理
    //调用entityToBytes(),将请求结果转化为byte[]数据
    //返回NetworkResponse请求结果对象
}

HUrlStack流程

//真正的网络请求对象,根据不同的系统,提供不同的实现,也可以自行实现改请求操作
performRequest(){
    //重写URL
    //使用系统原生的HttpURLConnection来实现网络请求操作
    //组装数据并返回给BasicNetwork对象
}


数据解析

Request

Request为抽象类,存在两个抽象方法,子类必须实现,如下:

parseNetworkResponse() //解析数据
deliverResponse() //分发请求结果

StringRequest

StringRequest为Request的子类,实现了上述两个抽象方法,如下:

parseNetworkResponse() {
    //将byte[]按照Request要求的格式,进行转化
}
deliverResponse() {
    //分发请求给mListener
}

参考

Volley请求整个顺序流程:https://blog.csdn.net/guolin_blog/article/details/17656437

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值