Должен ли я использовать 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, и вы получаете это "бесплатно", двигаясь вперед.