@Override public Call newCall(Request request) {
return new RealCall(this, request, false /* for web socket */);
}
可以看到 call 对象实际是 RealCall 的实例化对象
RealCall#execute()
@Override public Response execute() throws IOException {
synchronized (this) {
if (executed) throw new IllegalStateException(“Already Executed”);
executed = true;
}
captureCallStackTrace();
try {
// 执行 client.dispatcher() 的 executed 方法
client.dispatcher().executed(this);
Response result = getResponseWithInterceptorChain();
if (result == null) throw new IOException(“Canceled”);
return result;
} finally {
// 最后再执行 dispatcher 的 finish 方法
client.dispatcher().finished(this);
}
}
在 execute 方法中,首先会调用 client.dispatcher().executed(this)
加入到 runningAsyncCalls 队列当中,接着执行 getResponseWithInterceptorChain()
获取请求结果,最终再执行 client.dispatcher().finished(this)
将 realCall 从 runningAsyncCalls 队列中移除 。
我们先来看一下 getResponseWithInterceptorChain
方法
Response getResponseWithInterceptorChain() throws IOException {
// Build a full stack of interceptors.
List interceptors = new ArrayList<>();
interceptors.addAll(client.interceptors());
interceptors.add(retryAndFollowUpInterceptor);
interceptors.add(new BridgeInterceptor(client.cookieJar()));
interceptors.add(new CacheInterceptor(client.internalCache()));