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中