打个广告,不了解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