美文网首页每日一题-面试指导
每日一题:Volley源码问题分析

每日一题:Volley源码问题分析

作者: 林锐波 | 来源:发表于2017-07-26 21:12 被阅读101次

每日一题:Volley源码问题分析

学习推荐_Volley源码解析

面试率: ★★★☆☆

面试提醒

Volley是Google 2013年的I/O大会上volley发布的一个网路框架,主要用于解决通讯频率高,但传输数据量小的情景,虽然现在大部分使用的网络框架要么okHttp,要么retrofit.但是Volley是Google推荐的开源库,在面试中也有不少人会被问到,其中的代码设计,网络架构也是我们开发者可以学习的知识.

面试技巧

Volley是一个非常好拓展的网络框架多用组合,少用继承;针对接口编程,不针对具体实现编程,可以看出它十分适合我们自定义开发,如:

  • 自定义RequestQueue
  • 自定义Cache
  • 自定义HttpStatck
  • 自定义Filter

在实际开发中,随着项目的不断演化,私人订制的功能也慢慢崭露头角,掌握了解并掌握一两种自定义技能也对面试中有较好的帮助.
记住:在面试中可以画图Volley的流程图也是加分的一项哦.

面试题

下面是从Volley中挑选出的几道问题.

你为什么要使用Volley框架,他有什么特点?

Volley 的主要特点

  1. 扩展性强: Volley 中大多是基于接口的设计,可配置性强。2. 规范性好: 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理,缓存机制的支持等。并支持重试及优先级定义。4. 支持多版本: Android2.3↑ 基于 HttpURLConnection,2.3↓ 基于 HttpClient实现,这两者的区别及优 劣在4.2.1 Volley中具体介绍。5. 功能强大: 提供简便的图片加载工具。

Volley是怎么将请求数据切换到主线程的?

Volley的请求流程

  1. 根据优先级将请求添加到缓存队列
  2. 缓存调度线程从缓存队列中取出一个请求
    • 请求命中 ->从缓存中读取响应并解析
    • 请求丢失 ->网络调度线程从网络队列中取出一个请求
      • Http请求传输,解析响应,写缓存
  3. 最后将解析后的响应传递到主线程

Volley的核心类是什么?

Request,RequestQueue,CacheDispatcher,NetworkDispatcher.
然而RequestQueue是核心,其他三个通过组合的方式围绕着RequestQueue 类.各个功能也都是以接口或者抽象类的方式提供,我们可以通过出自定义,实现更符合我们项目需求的功能.

要注意的是, RequestQueue是Volley 框架的核心类之一,将请求 Request 加入到一个运行的RequestQueue中,来完成请求操作.

多用组合,少用继承;针对接口编程,不针对具体实现编程。
优秀框架的设计,令人叫绝,受益良多。

如果让通过Volley自己封装请求可以吗?

  1. 我们平时大多采用Volly.newRequestQueue(context)的默认实现,构建 RequestQueue。
  2. 通过源码可以看出,我们可以抛开 Volley 工具类构建自定义的 RequestQueue,采用自定义的HttpStatck,采用自定义的Network实现,采用自定义的 Cache 实现等来构建RequestQueue。

其实Volley类就是一个工具类而已,
里面组合了HttpStack ->Network,Cache -> RequestQueue
那么我们也可以自己封装一个工具类的.
优秀框架的高可拓展性的魅力来源于此啊.

HttpURLConnection 和 AndroidHttpClient(HttpClient 的封装)如何选择及原因?

  1. 在 Froyo(2.2) 之前,HttpURLConnection 有个重大 Bug,调用 close() 函数会影响连接池,导致连接复用失效,所以在 Froyo 之前使用 HttpURLConnection 需要关闭 keepAlive。
  2. 另外在 Gingerbread(2.3) HttpURLConnection 默认开启了 gzip 压缩,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了请求结果缓存。
  3. 再加上 HttpURLConnection 本身 API 相对简单,所以对 Android 来说,在 2.3 之后建议使用 HttpURLConnection,之前建议使用 AndroidHttpClient。

什么是请求头?

假设HTTP请求头要求服务端返回一个HTML格式的文件,但服务端强行返回一个json格式的文件,那么用浏览器查看还是报错,查看不了,那么请求头到底有什么用啊,还要受限于服务端.

如:
一些请求状态,要结果码(404,303)

Volley的请求头可以自定义的吗,在哪里自定义?

Volley 如果希望自定义 User-Agent,可在自定义 Request 类中重写 getHeaders() 函数,这个函数的返回值是一个map集合.

Volley支持多少种请求?

Volley 支持 8 种 Http 请求方式 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH.

相关文章

网友评论

    本文标题:每日一题:Volley源码问题分析

    本文链接:https://www.haomeiwen.com/subject/drzokxtx.html