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を使用する必要がありますか?
このような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 。おもしろいと思います。
知りません。
しかし、私は同じような立場にあり、「いいえ、今のところではありません」の側に降りてきます。私にはいくつかのアイデアがありますが、詳しく説明します。
Volleyの下でOkHttpを使用することに実際のメリットは見つかりませんでした。 (接続先のHTTPSサーバーはSPDYをサポートしていません。すでに接続プールを取得しており、gzipエンコードも使用していると思います。また、Volleyにキャッシュが機能していることもわかっています。)さらに数百Kが追加されます。パフォーマンスを損なうだけのアプリだと思います。
Volleyを利用するように変更できるというOkHttpの機能は、実際の接続の中止です。私のアプリはたくさんのリクエストを出し、それらの多くもキャンセルするので、これは私が最も興味を持っていることです。現在、Volleyは、接続(またはその周辺)を開くまでの要求を実際に停止するのではなく、キャンセルされたとマークしてサーバーの応答を破棄するだけです。
これはセマンティクスには問題ありませんが、私の場合はパフォーマンスに深刻な影響を及ぼします。具体的には、死にかけているサーバーに大量のリクエストを送信し、それらのリクエストがタイムアウトする場合、それらをタイムアウトするのに1回あたり30秒程度の時間がかかります。その間、他のキューに入れられたリクエストはを利用できません。プールが接続のタイムアウトを待機しているため、ネットワーク接続。
したがって、私が考えているのは、「OkHttpStack」を記述し、#cancel()
イベントをOkHttpに下げて、実際に接続を中止することは素晴らしいことです。これは私にとって大きなメリットです。
FWIW、Android 4.4の電話では、すべてHTTPUrlConnectionのOkHttp実装を使用しており、「無料で」前進しています。