Pregunta

Esta pregunta ya tiene una respuesta aquí:

Necesito descargar una página web en una aplicación de Android y me cuesta decidir si usar el cliente Android Apache HTTP o la URLConnection de Java.

¿Alguna idea?

¿Fue útil?

Solución

Para la mayoría de las cosas diría que HttpClient es el camino a seguir. Sin embargo, hay algunas situaciones y casos de borde en los que volvería a un URLConnection. Ejemplos de casos de borde aquí y aquí

EDITAR
Se ha hecho una pregunta similar antes: httpclient vs httpurlconnection. Asumiría que HttpUrlConnection es algo más rápido como el HttpClient está construido sobre las bibliotecas Java estándar. Sin embargo yo encontraría HttpClient Codifique mucho más rápido y más fácil de escribir y mantener. Según un comentario a continuación, los elementos centrales de HttpClient han sido optimizados del rendimiento.

Si el rendimiento es una gran preocupación, su mejor opción es escribir dos clientes, uno que usa cada método, entonces compare los dos. Si hace esto, háganos saber los resultados.

Otros consejos

Google ha despreciado silenciosamente el uso del cliente Apache HTTP desde Gingerbread: http://android-developers.blogspot.com/2011/09/androids-http-clients.html. Y aunque no lo marcaron con anotación desaprobada, le sugiren que use httpurlconnection para nuevas aplicaciones como: it is where we [Google] will be spending our energy going forward.

Personalmente, no me gusta esa decisión y prefiero seguir con HTTPClient 4.1+, ya que es más rápido, tengo menos errores y se actualiza regularmente. Y si bien no puede actualizar la biblioteca del sistema a la versión 4.1, puede incluir HTTPClient JAR en su proyecto Android (como beneficio adicional, esto le permitiría no depender de las correcciones de errores de Google y las actualizaciones de los proveedores). Sin embargo, hay una trampa: para evitar posibles colisiones con la biblioteca incorporada, debe cambiar el nombre de los paquetes HttpClient con la herramienta Jarjar. Resultó que alguien ya hizo esto (los proyectos de biblioteca JAR y Android están disponibles para descargar):

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

Este es un reempaquetado de HTTPClient 4.1 para Android. La versión de httpclient en el SDK de Android es 4.0beta2. Ha habido varias actualizaciones de HTTPClient y algunas correcciones de errores muy necesarias como el almacenamiento en caché de autores desde el 4.0beta.

Desde que Google ha desapercibido httpclient a favor de Java estándar HttpurlConnection, creé un script para convertir una versión de stock de HTTPClient de Apache en una biblioteca de Android.

Cambios en el stock httpclient

  • Renombrado todos los paquetes org.apache.http a ch.boye.httpclientandlib
  • Eliminó todas las clases que dependen de org.ietf.* (Autenticación Spnego)
  • Reemplazó org.apache.commons.codec.binary.base64 con android.util.base64
  • Creó una nueva clase httpclientandroidlog para reemplazar org.apache.commons.logging

En Gingerbread y más tarde, HttpurlConnection es el camino a seguir. Considere apache httpclient en desuso. (Tenga en cuenta que Android no usa httpclient 4.1, mencionado en otro comentario).

Si tiene un caso en el que Apache HttpClient es más rápido, repórtelo como un error aquí: http://code.google.com/p/android/issues/list

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top