阅读Volley源码快有一周时间了,从最初的不知从何看起,到后来的大致了解,这是一个漫长的过程。下面就对观看心得做一个小结,以后会有更多的需要阅读源码,希望这次积累的经验对今后阅读源码、技术文档产生帮助。
在查看框架的源码时,最重要的是先找准入口,就像一个迷宫,如果入口都找不到,根本就无法找到正确的道路,通过迷宫。而寻找入口的方法很简单,就是我们在使用这个框架时,第一行写的代码,这就是我们要找的入口。
例如使用Volley时,我们第一行代码是:
RequestQueue requestQueue=Volley.newRequestQueue(this);
StringRequest stringRequest=new StringRequest(......)
requestQueue.add(stringRequest);
因此Volley框架的入口就是Volley.newRequestQueue(this);
这会生成一个RequestQueue(请求队列)的实例,并把请求添加到队列中。同时会有两个调度员线程,分别是CacheDispatcher和NetworkDispatcher,这两个线程在后台一直运行,轮训是否有待处理的请求,如果有就处理,否则就阻塞。
其中有一个重要的接口就是HttpStack,这是用来处理用户请求Request的接口,它有两个实现类,分别是HurlStack和HttpClientStack。由于Android Api 9(Android 2.3.2)之后不支持HttpClient,为了向下兼容,HurlStack是基于HttpUrlConnection建立连接,而HttpClientStack是基于HttpClient建立连接。而NetWork通过HttpStack处理请求,并返回处理结果。
一.当请求需要缓存时,把请求交给缓存调度员CacheDispatcher,CacheDispatcher根据请求url获取缓存结果。(1).缓存信息为空,说明找不到缓存信息
(没有缓存信息的两种原因:
1.第一次处理这个请求
2.不是第一次处理这个请求,但是缓存已过期
(缓存过期也分为:完全过期和软过期。完全过期是指真正的过期,软过期是指再过一会就要过期了)
),因为缓存过期了,所以需要通过网络处理请求url。并将请求的结果添加到缓存,方便下次使用,并将处理结果返回给调用者。(2).否则,从缓存获取结果并返回给调用者。
二.不需要缓存,把请求交给网络调度员NetworkDispatcher,并将结果返回给调用者
Volley的大致处理流程就是这样的。