web-dev-qa-db-ja.com

Apache HTTPクライアントまたはURLConnection

AndroidアプリでWebページをダウンロードする必要があり、Android Apache httpクライアントまたはJavaのURLConnectionを使用するかどうかを決めるのに苦労しています。

何かご意見は?

52
Amit Raz

ほとんどの場合、HttpClientを使用することをお勧めします。ただし、URLConnectionにフォールバックするいくつかの状況とEdgeのケースがあります。エッジケースの例 here および here

[〜#〜] edit [〜#〜]
同様の質問が以前に尋ねられました: httpclient vs httpurlconnection 。 HttpUrlConnectionは標準のJavaライブラリの上に構築されるため、HttpClientは多少高速であると想定します。ただし、 HttpClientコードのほうがはるかに速く、簡単に記述および保守できます。以下のコメントによると、HttpClientのコア要素はパフォーマンスが最適化されています。

パフォーマンスが主要な懸念事項である場合、最善の策は、各メソッドを使用して2つのクライアントを作成し、両方のベンチマークを実行することです。これを行う場合は、結果をお知らせください。

27
dave.c

GoogleはGingerbread以降、Apache HTTPクライアントの使用を静かに非推奨にしています: http://Android-developers.blogspot.com/2011/09/androids-http-clients.html 。また、非推奨の注釈でマークしませんでしたが、新しいアプリケーションにはit is where we [Google] will be spending our energy going forwardとしてHttpURLConnectionを使用することをお勧めします。

個人的に私はその決定が好きではなく、HttpClient 4.1+に固執します。それはより高速で、バグが少なく、定期的に更新されるためです。また、システムライブラリをバージョン4.1にアップグレードすることはできませんが、HttpClient jarをAndroidプロジェクトに含めることができます(追加の利点として、これによりGoogleのバグ修正やベンダーの更新に依存しなくなります)。ただし、落とし穴が1つあります。組み込みライブラリとの衝突を防ぐために、JarJarツールを使用してhttpclientパッケージの名前を変更する必要があります。誰かがすでにこれを行っていることが判明しました(再パッケージ化されたjarおよびAndroidライブラリプロジェクトはダウンロード可能です):

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

これは、HttpClient 4.1 for Androidの再パッケージ化です。 Android SDKのHttpClientのバージョンは4.0beta2です。 4.0ベータ以降、HttpClientにいくつかの更新が行われ、認証キャッシュなどの非常に必要なバグ修正が行われました。

GoogleはJava標準のHttpURLConnectionを支持してHttpClientを廃止しているため、ApacheのHttpClientのストックリリースをAndroidライブラリに変換するスクリプトを作成しました。

ストックHttpClientへの変更

  • すべてのパッケージの名前をorg.Apache.httpからch.boye.httpclientandroidlibに変更しました
  • Org.ietf。*に依存するすべてのクラスを削除しました(SPNEGO認証)
  • Org.Apache.commons.codec.binary.Base64をAndroid.util.Base64に置き換えました
  • Org.Apache.commons.loggingを置き換える新しいクラスHttpClientAndroidLogを作成しました
45
Idolon

gingerbread以降では、HttpURLConnectionを使用する方法です。 Apache HttpClientの廃止を検討してください。 (Androidは別のコメントで言及されているHttpClient 4.1を使用しないことに注意してください。)

apache HttpClientの方が速い場合は、バグとしてこちらに報告してください: http://code.google.com/p/Android/issues/list

14
Elliott Hughes