1.创建一个 OkHttpClient ---> new OkHttpClient();
2.创建一个 Request对象 ---> new Request.Builder();
3.创建一个Response对象(表示一个被执行的请求) ---> client.newCall(request) ---> 执行异步请求call.enqueue();
onFailure() 和 onResponse()都是在子线程中完成的,当你要更新UI视图的时候需要切换到主线程完成
ok异步请求流程图---> enqueue(new Callback) Call请求是个接口去找他的实现类RealCall
首先根据synchronized(this)锁住当前RealCall对象,根据executed进行判断,为true的时候表示执行过了然后抛出异常.它的意思是只能执行一次call请求.接着通过传递进来的callBack封装成AsyncCall(response)在构建了这个实现类之后他就调用了client.dispatcher.enqueue(new AsyncCall(responseCallback))这个方法[返回一个dispatcher调度器对象]
实现类enqueue
---> enqueue(new AsyncCall(responseCallback))
我们发起网络请求之后进行if判断(正在运行的异步任务 和 正在调度请求主机的最大数)如果都在最大数里就可以把call请求添加到异步请求队列中,然后调用线程池的execute方法执行.如果不满足就添加到准备就绪的异步请求队列中.
实例里的enqueue常量 常量
网友评论