2. 发起请求
OkHttpClient.newCall
实际是创建一个RealCall
实例:
-
@Override
-
public Call newCall(Request request) {
-
return new RealCall(this, request, false /* for web socket */);
-
}
RealCall.enqueue
实际就是讲一个RealCall
放入到任务队列中,等待合适的机会执行:
-
@Override
-
public void enqueue(Callback responseCallback) {
-
synchronized (this) {
-
if (executed) throw new IllegalStateException(“Already Executed”);
-
executed = true;
-
}
-
captureCallStackTrace();
-
client.dispatcher().enqueue(new AsyncCall(responseCallback));
-
}
从代码中可以看到最终RealCall
被转化成一个AsyncCall
并被放入到任务队列中,任务队列中的分发逻辑这里先不说,相关实现会放在OkHttp源码分