Volley源码分析

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值