美文网首页
okhttp异步请求:AsyncCall、线程池、双向队列

okhttp异步请求:AsyncCall、线程池、双向队列

作者: 崽子猪 | 来源:发表于2019-06-03 11:24 被阅读0次

    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
    常量 常量

    相关文章

      网友评论

          本文标题:okhttp异步请求:AsyncCall、线程池、双向队列

          本文链接:https://www.haomeiwen.com/subject/aggqxctx.html