就在刚才恰恰初步看完了Volley源码,最主要的体会有两个:
1.必须了解Http协议,或者说必须熟悉如何构造Http请求和如何解析Http响应。
2.必须熟悉Cache的基本原理,并结合Http响应来分析如何进行Cache的最佳应用。
3.熟悉各种Queue和List,Map等的基本操作,了解线程同步和互斥锁。
4.最好用几张纸来记录主要的类的结构,以便分析关联性。
下面就是推荐如何看源码了。对于这个不熟悉的项目结构,我看到这样的目录结构:
因此我首先选择从外部查看,先看接口类,因为接口一般是比较简单的,而且一般都能了解某些接口的基本功能,比如:
Cache接口,这个接口就定义了一些主要的管理缓存的的属性和一个Entry类来管理请求/响应缓存的相关数据,这个通过后来的了解我知道可能是用来判断本地缓存是否过期的(这里插一句,任何直接读取本地数据都比从网络上获取数据快,做出这个假设能帮助我很好的理解Cache,虽然不一定对)。
按照这个思路,我又看了一个Network接口:
这个Network接口虽然简单到只有一个方法,但是涉及到了三种在Volley中定义的类,按照原则,我首先查看了参数中那个Request类的定义,这样就揭开了第一个复杂类的学习,抽象Request类,这个是所有请求的基类,我们将来如果有需要自定义的请求格式可以从这里来继承定义,比如后来在toolbox中看到的三种基本数据的请求方式,Image/Json/String。下面我就说一下这三种请求的用法,有涉及的类我会简略带过,需要学习的请自行研究Volley源码。
1.
首先是最基本的StringRequest,请求的是一段字符串资源:
这里面可以看到,有一个RequestQueue被使用了,这个队列是用来调度一应Request的一个处理队列,其中包含了一系列的调度工具和一系列的优化方法,这也是除了Request之外的我第二个看到的复杂类结构,在这个类中有一系列的其他类出现,比如缓存调度,网络调度,几个等待和处理的队列等等,我总结了一个简单的图,不论对错,是个参考:
,回到正题,我们看一下结果:
这就是构造的最简单的一个fetch字符串的方法。
2.获取JSON数据。
对于JSON类型的数据有两个相关的请求类,一个针对JsonObject,另一个针对JsonArray,从Request继承后将泛型参数分别定成了JsonObject和JsonArray。
对于JsonObject和JsonArray其实界线并非相当明显,一般数据都是JsonObject的,当然视情况而定,先测试的是JsonObject的:
结果:
由于实在不太好找jsonarray的数据,所以在这里就没有办法演示,只能上段代码,可以看出JSONArray的请求可以比较简单构造:
3.最后是图片ImageRequest请求的介绍,由于某些原因,图片请求类没有仔细看,但是大略看了一下发现无非也就是自适应缩放等内容,有一个名叫Picasso的图片库可能更好,等过段时间我再看看它的源码再做详细讨论:
。
刚才在Volley中使用Image请求的结果是:
Ok,大体上就是这样,我坚信,最简单的就是最好的,当然,这个简单可能有多种意思。
下一篇我可能会结合Http协议的一些知识来介绍Volley中对于Request和Response的封装,前提是我看完RFC不会懵住。