53

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

何かご意見は?

4

3 に答える 3

45

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

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

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

これは、Android 用の HttpClient 4.1 の再パッケージ化です。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 を作成しました
于 2011-10-12T15:56:18.323 に答える
28

HttpClientほとんどの場合、それが進むべき道だと思います。ただし、いくつかの状況とエッジ ケースがあり、URLConnection. エッジケースの例ここここ

EDIT
同様の質問が以前に尋ねられました: httpclient vs httpurlconnection標準のJavaライブラリの上に構築されているため、多少高速であると思います。ただしHttpUrlConnectionHttpClientHttpClient、コードの作成と保守がはるかに迅速かつ簡単になると思います。以下のコメントによると、 のコア要素はHttpClientパフォーマンスが最適化されています。

パフォーマンスが重要な問題である場合、最善の策は、2 つのクライアントを作成し、それぞれの方法を 1 つずつ使用して、両方をベンチマークすることです。これを行う場合は、結果をお知らせください。

于 2011-01-25T21:49:32.380 に答える
14

Gingerbread 以降では、HttpURLConnection が最適です。Apache HttpClient は廃止されたと考えてください。(別のコメントで言及されているように、Android は HttpClient 4.1 を使用しないことにも注意してください。)

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

于 2011-03-10T19:27:05.190 に答える