Android Volly源码分析之执行线程

来源:互联网 发布:中国的富豪阶级 知乎 编辑:程序博客网 时间:2024/06/05 05:59

CacheDispatcher作为cache线程,只有一个线程
当将一个request加入网络请求队列时,先从Cache中查找是否有相同的请求,查找key值为

                final Request request = mCacheQueue.take();                request.addMarker("cache-queue-take");                Cache.Entry entry = mCache.get(request.getCacheKey());

其中key值为请求的url ,根据请求是否过期,是否需要刷新操作,来进行操作。
NetWorkDispatcher extends Thread 做为具体执行网络请求操作的线程,在

                    Response<?> response = request.parseNetworkResponse(networkResponse);                    request.addMarker("network-parse-complete");                    mDelivery.postResponse(request, response);

中可以看出在获取网络请求的response之后mDelivery.postResponse(request, response);将操作转移到了主线程(通过ExecutorDelivery中的handler实现)

if (networkResponse.notModified && request.hasHadResponseDelivered()) {                    request.finish("not-modified");                    continue;                }

根据返回码304,得出response和上次请求没有修改,直接结束,并加入not-modified标识。以便于后续处理。

实际执行发送网络请求的操作在BasicNetwork–》HttPStack—》CurlStack和HttpClientStack中

0 0
原创粉丝点击