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

每日一题: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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容