web-dev-qa-db-ja.com

VolleyライブラリでOkHttpを使用する必要がありますか?

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による拡張機能の1つは、応答キャッシュです。しかし、ボレーもそうします。これに似た問題がありますか: https://github.com/square/okhttp/issues/68

3)また、Volleyで2つのRequestQueueを使用しています。1つは画像用、もう1つはJSON用です。両方のキューでOkHttpを使用する必要がありますか?

13
User31689

このようなokhttp-urlconnectionを使用しないスタックに切り替えることをお勧めします-> https://goo.gl/ZZRSQ5

1)はいOkHttpには、速度、HTTP/2、SPDY、帯域幅の節約など、多くの利点があります...

2)問題ありません。

3)両方に必要なcom.Android.volley.RequestQueueは1つだけです。これを見てください-> https://goo.gl/GMn3Ls

OkHttp + Volley + Gsonについてここに書いた-> https://goo.gl/nl2DfN 。おもしろいと思います。

8
Sotti

知りません。

しかし、私は同じような立場にあり、「いいえ、今のところではありません」の側に降りてきます。私にはいくつかのアイデアがありますが、詳しく説明します。

Volleyの下でOkHttpを使用することに実際のメリットは見つかりませんでした。 (接続先のHTTPSサーバーはSPDYをサポートしていません。すでに接続プールを取得しており、gzipエンコードも使用していると思います。また、Volleyにキャッシュが機能していることもわかっています。)さらに数百Kが追加されます。パフォーマンスを損なうだけのアプリだと思います。

Volleyを利用するように変更できるというOkHttpの機能は、実際の接続の中止です。私のアプリはたくさんのリクエストを出し、それらの多くもキャンセルするので、これは私が最も興味を持っていることです。現在、Volleyは、接続(またはその周辺)を開くまでの要求を実際に停止するのではなく、キャンセルされたとマークしてサーバーの応答を破棄するだけです。

これはセマンティクスには問題ありませんが、私の場合はパフォーマンスに深刻な影響を及ぼします。具体的には、死にかけているサーバーに大量のリクエストを送信し、それらのリクエストがタイムアウトする場合、それらをタイムアウトするのに1回あたり30秒程度の時間がかかります。その間、他のキューに入れられたリクエストはを利用できません。プールが接続のタイムアウトを待機しているため、ネットワーク接続。

したがって、私が考えているのは、「OkHttpStack」を記述し、#cancel()イベントをOkHttpに下げて、実際に接続を中止することは素晴らしいことです。これは私にとって大きなメリットです。

FWIW、Android 4.4の電話では、すべてHTTPUrlConnectionのOkHttp実装を使用しており、「無料で」前進しています。

3
nmr