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

问题描述 投票:0回答:2

我在我的 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 中使用了两个 RequestQueue - 一个用于图像,另一个用于 JSON。我应该在两个队列中使用 OkHttp 吗?

android android-volley okhttp
2个回答
10
投票

我建议您切换到不使用 okhttp-urlconnection 的堆栈,例如这个

  1. 是的,OkHttp 有很多优点,比如速度、HTTP/2、SPDY、节省带宽...

  2. 我没有遇到任何问题。

  3. 两者只需要一个 com.android.volley.RequestQueue。看看这个

我在这里写过有关 OkHttp + Volley + Gson 的文章。我想你可能会感兴趣。


3
投票

我不知道。

但我也处于类似的境地,我站在“不,暂时不行”的一边。不过我有一些想法,我会详细说明:

我还没有发现在 Volley 下使用 OkHttp 对我来说有任何真正的好处。 (我连接的 HTTPS 服务器不支持 SPDY,我知道我已经获得了连接池,我相信还有 gzip 编码,而且我知道 Volley 中有一个可用的缓存。)它又增加了几百 K我相信该应用程序只会损害性能。

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

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

所以我想的是,编写一个“OkHttpStack”并将

#cancel()
事件深入到 OkHttp 并实际中止连接会很棒,这对我来说将是一个巨大的胜利。

FWIW,在我看过的 Android 4.4 手机上,它们都使用 HTTPUrlConnection 的 OkHttp 实现,并且您可以“免费”继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.