Мне нужно загрузить веб-страницу в Android-приложении, и мне сложно решить, использовать ли клиент http-аффикса apache или java URLConnection.
Любые мысли?
Мне нужно загрузить веб-страницу в Android-приложении, и мне сложно решить, использовать ли клиент http-аффикса apache или java URLConnection.
Любые мысли?
В большинстве случаев я бы сказал, что HttpClient
- это путь. Однако есть некоторые ситуации и крайние случаи, когда я возвращаюсь к URLConnection
. Примеры краевых случаев здесь и здесь
ИЗМЕНИТЬ
Аналогичный вопрос был задан раньше: 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 в свой проект 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
в Gingerbread, а позже, HttpURLConnection - это путь. рассмотрите устаревший Apache HttpClient. (также обратите внимание, что Android не использует HttpClient 4.1, упомянутый в другом комментарии.)
если у вас есть случай, когда Apache HttpClient работает быстрее, сообщите об этом как об ошибке здесь: http://code.google.com/p/android/issues/list