Android网络框架-Volley(三) CacheDispatcher和NetworkDispatcher源码分析

在Android网络框架-Volley(一) 工作原理分析 中的流程图中我们知道Volley工作是有三个线程的:主线程、缓存线程和网络线程。这些线程的工作是建立在RequestQueue上的,上一篇文章 Android网络框架-Volley(二) RequestQueue源码分析以及建立一个RequestQueue 中我们分析了RequestQueue的源码以及最佳使用方式,这篇文章我们来分析两大管家CacheDispatcher和NetworkDispatcher

当一个request加入到RequestQeue中后,首先是交给CacheDispatcher的,我们分析一个CacheDispatcher的源码

有几种情况会吧request加入到网络队列中去获取数据
1.缓存中没有数据,直接到网络中去获取
2.缓存中有数据,但是已经完全过期,直接到网络中去获取
3.缓存中有数据,已经过期但没有完全过期,是一个需要刷新的状态,先将数据交给主线程,再到网络中获取最新数据,然后刷新
接下来我们分析NetworkDispatcher的源码
总结:
1.当一个request加入到requestQueue中,首先会交到CacheDispatcher手中。
    1.1.request请求的数据在缓存中
        1.1.1.数据已经完全过期,则将request交给NetworkDispatcher去从网络获取数据。执行2
        1.1.2.数据已经过期,但没有完全过期,需要刷新,则先将数据交付给主线程去显示,再交给NetworkDispatcher去从网路上获取最新数据,然后再交给主线程去更新。执行2
        1.1.3.数据没有过期,则直接从缓存中获取数据后,交付给主线程去显示
    1.2.request请求的数据没在缓存中,则交给NetworkDispatcher去从网络上获取。执行2
2.此时NetworkDispatcher拿到了request,到网络中去获取数据
    2.1.数据可以写到缓存,则将数据写到缓存,并且交付给主线程去显示
    2.2.数据不可以写到缓存,则直接交付给主线程去显示
     

你可能感兴趣的:(android,Volley,CacheDispatcher)