OkHttp实现多线程并发下载的笔记

         打个广告,不了解OkHttp的话可以先看下  http://blog.csdn.net/brycegao321/article/details/51830525

            需求:  手机拍摄若干张照片, 在wifi连接下上传到服务器。

       考虑问题:   如何设置并发传递多个文件的数量?  先剧透一下, OkHttp默认支持并发5个相同ip地址的上传文件请求。

       OkHttp是通过 client.newCall(request).enqueue函数添加异步任务的, newCall函数从字面上就看出是创建一个Call实例, 而类Call是OkHttp的执行单元, 即每个Http请求/返回都是一个Call对象。

/**
 * A call is a request that has been prepared for execution. A call can be
 * canceled. As this object represents a single request/response pair (stream),
 * it cannot be executed twice.
 */
       再看看enqueue函数(线程安全的哦)做了什么:

public void enqueue(Callback responseCallback) {
  enqueue(responseCallback, false);
}

void enqueue(Callback responseCallback, boolean forWebSocket) {
  synchronized (this) {
    if (executed) throw new IllegalStateException("Already Executed");
    executed = true;
  }
  client.getDispatcher().enqueue(new AsyncCall(responseCallback, forWebSocket));
}
          Dispatcher是OkHttp的调度策略类(Policy on when async requests are executed), 跟进去看Dispatcher的enqueue函数:

synchronized void enqueue(AsyncCall call) {
  if (runningCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
    runningCalls.add(call);
    getEx
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值