53 votes

Client http Apache ou URLConnection

J'ai besoin de télécharger une page web sur une application android et je vais avoir un moment difficile de décider si l'utilisation de l'android http apache client ou de java URLConnection.

Toutes les pensées?

45voto

Idolon Points 11503

Google a silencieusement obsolète HTTP Apache utilisation du client depuis de pain d'épice: http://android-developers.blogspot.com/2011/09/androids-http-clients.html. Et alors qu'ils n'ont pas de marquer avec déconseillé d'annotation, ils vous suggérons d'utiliser HttpURLConnection pour de nouvelles applications comme: it is where we [Google] will be spending our energy going forward.

Personnellement je n'aime pas cette décision et serait plutôt de conserver HttpClient 4.1+, car il est plus rapide, avoir moins de bugs et est mis à jour régulièrement. Et tandis que vous ne pouvez pas le système de mise à niveau de la bibliothèque vers la version 4.1, vous pouvez inclure HttpClient jar pour votre projet Android (comme avantage supplémentaire, cela vous permettrait de ne pas dépendre sur Google corrections de bugs et le vendeur mises à jour). Il y a un inconvénient cependant: pour éviter d'éventuelles collisions avec bibliothèque intégrée, vous devez renommer httpclient packages à l'aide de JarJar outil. S'est avéré quelqu'un l'a déjà fait (reconditionné bocal et Android de projets de bibliothèque sont disponibles pour le téléchargement):

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

C'est un reconditionnement de HttpClient 4.1 pour Android. La version de HttpClient dans le SDK Android est 4.0beta2. Il y a eu plusieurs les mises à jour HttpClient et on en a bien besoin des corrections de bugs, comme la mise en cache auth depuis la 4.0 bêta.

Depuis que Google a retiré de HttpClient en faveur de la Java standard HttpURLConnection j'ai créé un script pour convertir une sortie de stock Apache HttpClient dans un Androïde de la bibliothèque.

Modifications de stock HttpClient

  • Renommé tous les packages org.apache.http, ch.boye.httpclientandroidlib
  • Supprimé toutes les classes dépend de org.l'ietf.* SPNEGO (authentification)
  • Remplacé org.apache.commons.codec.binaires.Base64 avec android.util.Base64
  • Créé une nouvelle classe HttpClientAndroidLog pour remplacer org.apache.commons.la journalisation

28voto

dave.c Points 9120

Pour la plupart des choses, je dirais que c' HttpClient est le chemin à parcourir. Cependant, il existe certaines situations et cas limites où j'avais fait retomber en URLConnection. Des exemples de cas de bord ici et ici

MODIFIER
Une question similaire a été posée: httpclient vs httpurlconnection. Je suppose qu' HttpUrlConnection est un peu plus rapide que l' HttpClient est construite au-dessus de la norme de bibliothèques Java. Cependant , je trouverais HttpClient code plus rapide et plus facile à écrire et à maintenir. Selon un des commentaires ci-dessous, les éléments de base de l' HttpClient de la performance optimisée.

Si la performance est une préoccupation majeure de votre meilleur pari est d'écrire deux clients, l'utilisation de chaque méthode, puis comparer les deux. Si vous le faites, s'il vous plaît laissez-nous savoir les résultats.

14voto

Elliott Hughes Points 3138

dans le pain d'épices et plus tard, HttpURLConnection est le chemin à parcourir. envisager de Apache HttpClient obsolète. (notez aussi que Android n'utilise pas HttpClient 4.1, mentionné dans un autre commentaire.)

si vous avez un cas où Apache HttpClient est plus rapide, comme le rapport d'un bug ici: http://code.google.com/p/android/issues/list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X