17

オープン ソースの画像読み込み/キャッシュ ソリューションを探しています。

私は調べています:

グーグルのボレー

スクエアのピカソ

ユニバーサル イメージ ローダー

ディスクとネットワークからの非同期の画像読み込みを処理できるようにしたいのですが、Google のボレー ハンドルがディスクから読み込みを行っているかどうかはわかりません。

Volley はディスクからのリソースのロードを許可しますか??

私がやりたいことの例は、AQuery で利用できます。

4

6 に答える 6

18

http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/からいくつかの重要な情報を収集しました (古いバージョンのピカソ 2.0 とボレーの比較)

Picasso は完全に画像の読み込みに重点を置いています。その結果、画像の読み込みプロセスに癖がある場合

一方、Volley は、個々の小さな HTTP リクエストの処理に完全に重点を置いています。したがって、HTTP リクエストの処理に癖がある場合、Volley にはおそらくフックがあります。一方、画像の処理に癖がある場合、唯一の本当のフックは ImageCache です。何もないわけではありませんが、多くもありません。ただし、リクエストを定義すると、フラグメントまたはアクティビティ内からそれらを使用するのは簡単です。また、並列 AsyncTask とは異なります

ボレーがより一般的な問題を解決しようとするのに対し、ピカソは 1 つのことだけを行います。

Android は、高解像度の画像をまったくうまく処理できません。私は、Android アプリで OutOfMemoryError をキャッチするパターンに少し執着しています。ばかげた戦術のように思えますが、Volley は、Picasso のスケーリングと大きな画像の正確なフィッティングの手間と比較して、一部の画像シナリオを確実に処理する唯一の方法です。Picasso はscaleTypeImageViews の属性を尊重しません (最新バージョンで修正されているかどうかはわかりません)。

テスト例: Volley は、サムネイル バージョンではなく元の解像度の画像を読み込んでいるときに OutOfMemoryError をキャッチすることがわかりました。Picasso バージョンと比較すると、爆発しません (OutOfMemoryError もキャッチします)。ただし、picasso は大きすぎる画像を読み込めません。 . Volley は爆発しないだけでなく、Volley はこれらすべての大きな画像を表示します!!!.

Android ハッカーKoushik Duttaによると:

すべての Android イメージと http ライブラリのテスト

先週リリースされたいくつかの画像読み込みライブラリと http リクエスト ライブラリのテストとベンチマークを行ってきました。

並ぶ:

  • AndroidAsync + UrlImageViewHelper (koush)
  • ボレー (Google)
  • okhttp + ピカソ (正方形)

すべてがキャッシュされた応答と条件付きでキャッシュされた応答、キープアライブなどをサポートします。

考え:

  • Picasso には、最も優れた画像 API があります。私は将来/現在のもののために彼らのカリー化APIスタイルを盗むつもりです. ピカソはまた、著しく遅いです。特に 3g と wifi では。おそらく、カスタムの okhttp クライアントが原因です。
  • UrlImageViewHelper + AndroidAsync が最速です。ただし、これらの他の 2 つの優れたライブラリを試してみると、画像 API がかなり古いことが明らかになりました。
  • ボレーは滑らかです。私は彼らのプラグイン可能なバックエンド トランスポートを本当に楽しんでおり、AndroidAsync をドロップすることになるかもしれません。リクエストの優先度
    とキャンセルの管理が素晴らしいです。

更新 これらは実際には http ライブラリではありません。ただの画像ローダー。しかし、コメントで比較のリクエストがありました... Android-Universal-Image-Loader は、現在最も人気のあるものです。カスタマイズ性が高い。

AQuery; jquery に似ていますが、Android 用ですか? そういうことに興味があるなら、それはいいことだと思います。ただし、これは使用しないでください。UIスレッドか何かでクラップスします。リストビューで Nexus 4 に大量の画像をロードすると、HTC G1 に戻ったように感じました。大吃音。

キャッシュをクリアしてテスト:

コールドは新鮮なアプリの起動です。ウォームはキャッシュをクリアし、HTTP 接続はおそらく維持されます。

コールド/ウォーム(ミリ秒単位、10 回の実行の平均、実行ごとにデータを消去):

  • ピカソ 12142/11892
  • URL画像 7378/4525
  • ボレー 8292/7520
  • Android-Universal-Image-Loader 14484/11243
  • AQuery 11341/9637 (これは UI スレッドをロックしているようです...使用しないでください)

テスト コード ベースは次のとおりです: https://github.com/koush/AndroidNetworkBench

結論:これらのテストはほとんど決定的なものではありません。多くのイメージで同時ネットワーク アクセスをテストしました。確かに、ライブラリのテストにはそれ以上の作業があります。たとえば、Volley が Activity ライフサイクルとどのようにうまく機能するかが気に入っています。他のライブラリはそれを行いません。

だから、あなたのボートを本当に浮かせるものは何でも。私(Koush)は Picasso の API で Volley が欲しいです。

于 2013-09-17T06:58:42.340 に答える
4

volley' Request クラスは、すべてのネットワーク リクエストを処理します。ディスクからリソースをロードするクラスはまだ見つかりません..

于 2013-05-28T01:37:30.917 に答える
3

既定の Volley には、独自のディスク キャッシュの実装は含まれていません。DiskLruCache (または必要に応じてハイブリッド メモリ/ディスク キャッシュ) を取得し、Volley ImageCache インターフェイスを実装する必要があります。

このブログ投稿では、画像をロードするためにVolleyを使用してディスク ベースのキャッシュを実装する方法をまとめています。

于 2013-06-03T12:51:33.227 に答える