Apache http клиент или URLConnection

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

Какие-нибудь мысли?

3 ответа

Решение

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

РЕДАКТИРОВАТЬ
Подобный вопрос был задан ранее: https://stackru.com/questions/643730/httpclient-vs-httpurlconnection. Я бы предположил, что HttpUrlConnection несколько быстрее, чем HttpClient построен поверх стандартных библиотек Java. Однако я бы нашел HttpClient код гораздо быстрее и проще в написании и обслуживании. Согласно комментариям ниже, основные элементы HttpClient были оптимизированы производительность.

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

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 jar в свой проект Android (в качестве дополнительного преимущества это позволит вам не зависеть от исправлений ошибок Google и обновлений поставщиков). Однако есть один подводный камень: чтобы предотвратить возможные конфликты со встроенной библиотекой, вы должны переименовать пакеты httpclient с помощью инструмента JarJar. Выяснилось, что кто-то уже сделал это (доступны для скачивания перепакованные проекты jar и библиотеки Android):

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

Это переупаковка HttpClient 4.1 для Android. Версия HttpClient в Android SDK - 4.0beta2. Начиная с 4.0beta было несколько обновлений HttpClient и некоторые очень необходимые исправления, такие как кэширование аутентификации.

Так как Google отказался от HttpClient в пользу стандарта Java HttpURLConnection, я создал скрипт для преобразования стандартного выпуска 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

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

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

Другие вопросы по тегам