AndroidアプリでWebページをダウンロードする必要があり、Android Apache httpクライアントまたはJavaのURLConnectionを使用するかどうかを決めるのに苦労しています。
何かご意見は?
ほとんどの場合、HttpClient
を使用することをお勧めします。ただし、URLConnection
にフォールバックするいくつかの状況とEdgeのケースがあります。エッジケースの例 here および here
[〜#〜] edit [〜#〜]
同様の質問が以前に尋ねられました: httpclient vs httpurlconnection 。 HttpUrlConnection
は標準のJavaライブラリの上に構築されるため、HttpClient
は多少高速であると想定します。ただし、HttpClient
コードのほうがはるかに速く、簡単に記述および保守できます。以下のコメントによると、HttpClient
のコア要素はパフォーマンスが最適化されています。
パフォーマンスが主要な懸念事項である場合、最善の策は、各メソッドを使用して2つのクライアントを作成し、両方のベンチマークを実行することです。これを行う場合は、結果をお知らせください。
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を作成しました
gingerbread以降では、HttpURLConnectionを使用する方法です。 Apache HttpClientの廃止を検討してください。 (Androidは別のコメントで言及されているHttpClient 4.1を使用しないことに注意してください。)
apache HttpClientの方が速い場合は、バグとしてこちらに報告してください: http://code.google.com/p/Android/issues/list