Android アプリで Web ページをダウンロードする必要がありますが、Android Apache HTTP クライアントを使用するか、Java の URLConnection を使用するかを決めるのに苦労しています。
何かご意見は?
Android アプリで Web ページをダウンロードする必要がありますが、Android Apache HTTP クライアントを使用するか、Java の URLConnection を使用するかを決めるのに苦労しています。
何かご意見は?
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 を作成しました
HttpClient
ほとんどの場合、それが進むべき道だと思います。ただし、いくつかの状況とエッジ ケースがあり、URLConnection
. エッジケースの例ここと ここ
EDIT
同様の質問が以前に尋ねられました: httpclient vs httpurlconnection。 標準のJavaライブラリの上に構築されているため、多少高速であると思います。ただしHttpUrlConnection
HttpClient
HttpClient
、コードの作成と保守がはるかに迅速かつ簡単になると思います。以下のコメントによると、 のコア要素はHttpClient
パフォーマンスが最適化されています。
パフォーマンスが重要な問題である場合、最善の策は、2 つのクライアントを作成し、それぞれの方法を 1 つずつ使用して、両方をベンチマークすることです。これを行う場合は、結果をお知らせください。
Gingerbread 以降では、HttpURLConnection が最適です。Apache HttpClient は廃止されたと考えてください。(別のコメントで言及されているように、Android は HttpClient 4.1 を使用しないことにも注意してください。)
Apache HttpClient の方が高速な場合は、こちらでバグとして報告してください: http://code.google.com/p/android/issues/list