我在我的Android应用程序中使用Volley库。它工作正常,但我看到OkHttp也提供了一些更多的改进。我已经使用以下方法将OkHttp与Volley集成:
Volley.newRequestQueue(mCtx.getApplicationContext(), new OkHttpStack());
我的OkHttpStack课程是:
public class OkHttpStack extends HurlStack {
private final OkUrlFactory mFactory;
public OkHttpStack() {
this(new OkHttpClient());
}
public OkHttpStack(OkHttpClient client) {
if (client == null) {
throw new NullPointerException("Client must not be null.");
}
mFactory = new OkUrlFactory(client);
}
@Override protected HttpURLConnection createConnection(URL url) throws IOException {
return mFactory.open(url);
}
}
1)值得吗?我没有注意到任何明显的改进,但这可能是因为我还没有在我的服务器上实现SPDY支持。
2)OkHttp的增强功能是响应缓存。但是,凌空也是如此。我是否会遇到与此类似的问题:https://github.com/square/okhttp/issues/680
3)另外,我在Volley中使用了两个RequestQueues - 一个用于图像&其他的JSON。我应该在两个队列中使用OkHttp吗?
答案 0 :(得分:8)
我建议你切换到不使用像这样的okhttp-urlconnection的堆栈 - > https://goo.gl/ZZRSQ5
1)是的OkHttp有很多优点,如速度,HTTP / 2,SPDY,节省带宽...
2)我没有遇到任何问题。
3)你只需要一个com.android.volley.RequestQueue。看看这个 - > https://goo.gl/GMn3Ls
我在这里写过关于OkHttp + Volley + Gson的文章 - > https://goo.gl/nl2DfN。我想你可能会感兴趣。
答案 1 :(得分:3)
我不知道。
但是我处于类似的位置,而且我现在正走在"不,不是现在。"我有一些想法,我会详细说明:
我没有发现在Volley下使用OkHttp供我使用的任何真正的好处。 (我连接的HTTPS服务器不支持SPDY,我知道我已经获得连接池,我也相信gzip编码,我知道Volley有一个工作缓存。)它又增加了另一个我认为应用程序几百K只能伤害性能。
OkHttp的确有,可以改变Volley的使用,是真正的连接中止。这是我最感兴趣的,因为我的应用程序提出了很多请求,并取消了很多请求。现在,Volley实际上并没有停止一直打开连接(或左右)的请求,它只是标记它被取消并抛弃了服务器响应。
这对于语义来说很好,但在我的情况下会产生严重的性能影响。具体来说,如果我向一个垂死的服务器发出一堆请求,并且那些请求将会超时,那么Volley会花费30秒的时间来计算这些请求,在此期间其他排队的请求无法使用网络连接,因为池正忙于等待超时连接。
所以我想的是写一个" OkHttpStack"并将#cancel()
事件发送到OkHttp并实际中止连接,这对我来说将是一个巨大的胜利。
FWIW,在Android 4.4手机上,我看过他们都使用了OkHttp实现的HTTPUrlConnection,而且你可以免费获得这些功能'前进。