Volley
cacheDir=com.hai.cache
RequestQueue
DiskBasedCache
cacheDir
BasicNetwork
HurlStack
ExecutorDelivery(new Handler(Looper.getMainLooper()
RequestQueue
AtomicInteger mSequenceGenerator
HashMap<String, Queue<Request>> mWaitingRequests
HashSet<Request> mCurrentRequests
PriorityBlockingQueue<Request> mCacheQueue
PriorityBlockingQueue<Request> mNetworkQueue
NetworkDispatcher[4] mDispatchers
mNetworkQueue
mNetwork(BasicNetwork)
mCache(DiskBasedCache)
mDelivery(ExecutorDelivery)
CacheDispatcher(request调度线程)
mCacheQueue
mNetworkQueue
mCache(DiskBasedCache)
mDelivery(ExecutorDelivery)
1,mCache从缓存读取所遇缓存文件的CacheHeader,记录缓存文件大小
2,CacheDispatcher循环从 mCacheQueue 中取走request
判断DiskBasedCache是否有key为此请求的Uri的Cache.Entry,没有的话mNetworkQueue添加request
3,NetworkDispatcher循环从 mNetworkQueue 中取走request
BasicNetwork执行request
HurlStack执行request,connection.setUseCaches(false)
4初始化一个StringRequest:
Request.Method.POST
Response.Listener
Response.ErrorListener
DefaultRetryPolicy
DEFAULT_TIMEOUT_MS = 2500;
DEFAULT_MAX_RETRIES = 1;
DEFAULT_BACKOFF_MULT = 1.0F;
mShouldCache=true
5StringRequest 设置当前请求队列, mCurrentRequests 添加StringRequest
mWaitingRequests 第一次添加key=uri,value=null; mCacheQueue 添加StringRequest
正在分析 PriorityBlockingQueue.take()是否原子性
PoolingByteArrayOutputStream
Volley
DiskBasedCache cacheDir=package/cache/volley//缓存数据
request.mDefaultTrafficStatsTag=host.hashcode/0 if url=null
HttpStack stack=HurlStack
UrlRewriter mUrlRewriter=null;
SSLSocketFactory mSslSocketFactory=null;
network = new BasicNetwork(stack);
mHttpStack = httpStack;
ByteArrayPool mPool=new ByteArrayPool(DEFAULT_POOL_SIZE)
queue = new RequestQueue(new DiskBasedCache(cacheDir), network);//请求队列
Cache mCache=cacheDir;
Network mNetwork=network
//请求队列
Map<String, Queue<Request>> mWaitingRequests =new HashMap<String, Queue<Request>>();
Set<Request> mCurrentRequests = new HashSet<Request>()
PriorityBlockingQueue<Request> mCacheQueue =new PriorityBlockingQueue<Request>();
//请求队列
PriorityBlockingQueue<Request<?>> mNetworkQueue = new PriorityBlockingQueue<Request<?>>();
List<RequestFinishedListener> mFinishedListeners =new ArrayList<RequestFinishedListener>();
ResponseDelivery mDelivery=new ExecutorDelivery(new Handler(Looper.getMainLooper()))
Executor mResponsePoster=new Executor()
Thread[] mDispatchers=new NetworkDispatcher[4];//网络调度器
BlockingQueue<Request<?>> mQueue=mNetworkQueue;
Network mNetwork=mNetwork;
Cache mCache=mCache;
ResponseDelivery mDelivery=mDelivery;
Thread mCacheDispatcher;//缓存调度器
BlockingQueue<Request<?>> mCacheQueue=mCacheQueue;
BlockingQueue<Request<?>> mNetworkQueue=mNetworkQueue;
Cache mCache=mCache;
ResponseDelivery mDelivery;
Request request
RequestQueue mRequestQueue=queue
Integer mSequence;
Volley源码分析
最新推荐文章于 2022-02-13 12:16:12 发布