Apache http client или URLConnection

Мне нужно загрузить веб-страницу в Android-приложении, и мне сложно решить, использовать ли клиент http-аффикса apache или java URLConnection.

Любые мысли?

Ответы

Ответ 1

В большинстве случаев я бы сказал, что HttpClient - это путь. Однако есть некоторые ситуации и крайние случаи, когда я возвращаюсь к URLConnection. Примеры краевых случаев здесь и здесь

ИЗМЕНИТЬ
Аналогичный вопрос был задан раньше: httpclient vs httpurlconnection. Я бы предположил, что HttpUrlConnection несколько быстрее, так как HttpClient построен поверх стандартных библиотек Java. Однако я бы нашел код HttpClient намного быстрее и легче писать и поддерживать. Согласно приведенным ниже комментариям, основные элементы HttpClient оптимизированы по производительности.

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

Ответ 2

Google молча осуждает использование HTTP-клиента Apache с Gingerbread: http://android-developers.blogspot.com/2011/09/androids-http-clients.html. И хотя они не отмечали его с устаревшей аннотацией, они предлагают вам использовать HttpURLConnection для новых приложений как: it is where we [Google] will be spending our energy going forward.

Лично мне не нравится это решение и скорее придерживаюсь HttpClient 4.1+, так как он быстрее, имеет меньше ошибок и регулярно обновляется. И хотя вы не можете обновить системную библиотеку до версии 4.1, вы можете включить банку HttpClient в свой проект Android (в качестве дополнительного преимущества это позволит вам не зависеть от исправлений ошибок Google и обновлений поставщиков). Однако есть одна ошибка: чтобы предотвратить возможные столкновения со встроенной библиотекой, вы должны переименовать пакеты httpclient с помощью инструмента JarJar. Оказалось, что кто-то уже сделал это (для загрузки доступны переупакованные банки и проекты на базе Android):

http://code.google.com/p/httpclientandroidlib/

Это переупаковка HttpClient 4.1 для Android. Версия HttpClient в Android SDK - 4.0beta2. Было несколько обновления для HttpClient и некоторые столь необходимые исправления, такие как auth caching так как 4.0beta.

Так как Google устарел HttpClient в пользу стандарта Java HttpURLConnection Я создал script, чтобы конвертировать выпуск акций Apache HttpClient в библиотеку Android.

Изменения в запасе HttpClient

  • Переименовано все пакеты org.apache.http в ch.boye.httpclientandroidlib
  • Удалены все классы, зависящие от org.ietf. * (аутентификация SPNEGO)
  • Заменено org.apache.commons.codec.binary.Base64 с android.util.Base64
  • Создан новый класс HttpClientAndroidLog для замены org.apache.commons.logging

Ответ 3

в Gingerbread, а позже, HttpURLConnection - это путь. рассмотрите устаревший Apache HttpClient. (также обратите внимание, что Android не использует HttpClient 4.1, упомянутый в другом комментарии.)

если у вас есть случай, когда Apache HttpClient работает быстрее, сообщите об этом как об ошибке здесь: http://code.google.com/p/android/issues/list