Должен ли я использовать OkHttp с библиотекой Volley?

Я использую библиотеку Volley в своем приложении для Android. Он отлично работает, но я увидел, что OkHttp также предлагает некоторые улучшения. Я включил OkHttp с Volley, используя:

Volley.newRequestQueue(mCtx.getApplicationContext(), new OkHttpStack());

Класс My 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) Кроме того, я использую два RequestQueues в Volley - один для изображений и другой для JSON. Должен ли я использовать OkHttp с обеими очередями?

Ответ 1

Я рекомендую вам переключиться на стек, который не использует 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. Я думаю, вам может быть интересно.

Ответ 2

Я не знаю.

Но я нахожусь в подобном положении, и я спускаюсь на сторону "нет, не сейчас". У меня есть некоторые идеи, но я уточню:

Я не нашел реальных преимуществ использования OkHttp под Volley для моего использования. (Серверы HTTPS, к которым я подключаюсь, не поддерживают SPDY, и я знаю, что я уже получаю пул соединений, и я считаю также кодирование gzip, и я знаю, что у Volley есть рабочий кэш.) И он добавляет еще несколько сотен K к приложение, которое может только повредить производительность, я считаю.

Что у OkHttp есть, что Volley можно было изменить, чтобы использовать, это прекращение реального соединения. Это то, что меня больше всего интересует, потому что мое приложение делает много запросов и отменяет их много. Прямо сейчас Volley фактически не останавливает запрос, который полностью запустил соединение (или около того), он просто отменяет и отбрасывает ответ сервера.

Это отлично подходит для семантики, но имеет серьезные последствия для производительности в моем случае. В частности, если я сделаю кучу запросов на умирающий сервер, и эти запросы уйдут в тайм-аут, для Volley потребуется примерно 30 секунд для того, чтобы пропустить время, в течение которого другие запрошенные в очереди запросы не могут использовать сетевое соединение, потому что пул занят, ожидая подключения по времени.

Итак, я думаю, что было бы здорово написать "OkHttpStack" и отбросить событие #cancel() до OkHttp и фактически прервать соединение, что было бы большой победой для меня.

FWIW, на телефонах Android 4.4, на которых я смотрел, все они используют реализацию OkHttp для HTTPUrlConnection, и вы получаете это "бесплатно", двигаясь вперед.