问题 我应该将OkHttp与Volley库一起使用吗?


我在我的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吗?


5425
2018-01-15 09:55


起源



答案:


我建议你切换到一个不使用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。我觉得你可能会感兴趣。


8
2017-07-12 17:47



谢谢!好文章。我已经在我的应用程序中使用OkHttp + Volley一段时间了,它运行良好。我现在正在为它添加Gson支持。顺便说一句,okhttp-urlconnection有什么问题?这有什么好处: goo.gl/ZZRSQ5 - User31689
这个堆栈与Retrofit很好地结合在一起吗? - Igor Ganapolsky
Retrofit是一个DIFERENT堆栈。我不确定我的问题是@IgorGanaposlky。 - Sotti


答案:


我建议你切换到一个不使用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。我觉得你可能会感兴趣。


8
2017-07-12 17:47



谢谢!好文章。我已经在我的应用程序中使用OkHttp + Volley一段时间了,它运行良好。我现在正在为它添加Gson支持。顺便说一句,okhttp-urlconnection有什么问题?这有什么好处: goo.gl/ZZRSQ5 - User31689
这个堆栈与Retrofit很好地结合在一起吗? - Igor Ganapolsky
Retrofit是一个DIFERENT堆栈。我不确定我的问题是@IgorGanaposlky。 - Sotti


我不知道。

但我处于类似的位置,我正站在“不,不是现在”的一边。我有一些想法,我会详细说明:

我没有发现在Volley下使用OkHttp供我使用的任何实际好处。 (我连接的HTTPS服务器不支持SPDY,我知道我已经获得了连接池,我也相信gzip编码,我知道Volley有一个工作缓存。)它又增加了几百K我认为这个应用程序只会伤害性能。

OkHttp所拥有的,可以改变Volley的使用,是真正的连接中止。这是我最感兴趣的,因为我的应用程序提出了很多请求,并取消了很多请求。现在,Volley实际上并没有停止一直打开连接(或左右)的请求,只是将其标记为取消并抛弃服务器响应。

这对于语义来说很好,但在我的情况下会产生严重的性能影响。具体来说,如果我向一个垂死的服务器发出一堆请求,并且这些请求将超时,那么Volley会花费30秒的时间来计算这些请求,在此期间其他排队的请求无法使用网络连接,因为池正忙于等待超时连接。

所以我想的是写一个“OkHttpStack”并探测它会很棒 #cancel() 将事件发送到OkHttp并实际中止连接,这对我来说将是一个巨大的胜利。

FWIW,在我看过的Android 4.4手机上,他们都使用了HTTPUrlConnection的OkHttp实现,你就可以“免费”继续前进。


3
2018-01-16 19:29



实际上有一个好处。如果您默认使用Volley,则无法强制它在Android 4.3及更低版本上默认使用TLS。如果您使用OkHttp作为自定义堆栈,则可以强制执行它。 - Pier Betos