Apache http client или urlconnection [Duplicate
-
24-10-2019 - |
Вопрос
Этот вопрос уже имеет ответ здесь:
Мне нужно скачать веб -страницу в приложении Android, и мне трудно решить, использовать ли клиент Android Apache HTTP или UrlConnection Java.
Какие-нибудь мысли?
Решение
Для большинства вещей я бы сказал HttpClient
это путь. Однако есть некоторые ситуации и краевые случаи, когда я вернусь к URLConnection
. Анкет Примеры краевых случаев здесь а также здесь
РЕДАКТИРОВАТЬ
Аналогичный вопрос был задан ранее: httpclient против httpurlconnection. Я бы предположил, что Я бы нашел HttpUrlConnection
несколько быстрее, как HttpClient
строится на вершине стандартных библиотек Java. ОднакоHttpClient
Код намного быстрее и легче писать и поддерживать. Согласно комментариям ниже, основные элементы HttpClient
были оптимизированы производительность.
Если производительность является серьезной проблемой, лучше всего написать двух клиентов, один из которых использует каждый метод, а затем оцените их обоих. Если вы сделаете это, пожалуйста, сообщите нам результаты.
Другие советы
Google молча установил использование клиента Apache HTTP с момента 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 Library Projects доступны для скачивания):
http://code.google.com/p/httpclientandroidlib/
Это переупаковка httpclient 4.1 для Android. Версия httpclient в Android SDK составляет 4,0beta2. Было несколько обновлений в HTTPClient и некоторые столь необходимые ошибки, такие как кэширование Auth с 4.0beta.
Поскольку Google установил httpclient в пользу стандарта Java httpurlconnection, я создал сценарий для преобразования выпуска запаса Httpclient Apache в библиотеку Android.
Изменения в запасе httpclient
- Переименованные в все пакеты org.apache.http to ch.boye.httpclientandlib
- Удалил все классы в зависимости от 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