オープンソースの画像読み込み/キャッシュソリューションを探しています。
私は探しています:
ディスクやネットワークからの非同期イメージの読み込みを処理できるようにしたいのですが、Googleのボレーハンドルがディスクから読み込まれたかどうかはわかりません。
Volleyはディスクからのリソースのロードを許可しますか?
volley '要求クラスは、すべてのネットワーク要求を処理します。ディスクからクラス読み込みリソースをまだ見つけていません。
新しい/安定性の低いソフトウェアに問題がない場合は、Glideというオープンソースライブラリをリリースしました: https://github.com/bumptech/glide
これは、InputStreamを取得できる任意の画像を効率的にロードできるように設計されています。これには、いくつかの基本的なhttp/file読み込み実装が含まれていますが、独自のプラグインを使用したり、コールバックを介して外部ライブラリ(Volleyなど)を使用したりすることもできます。
これには、メモリとディスクのキャッシュ、および新しいデバイスでのビットマップのリサイクルが含まれます。必要なのは、データモデル(パス/ URL/URIなど)の入力ストリームを取得するインターフェイスを実装し、Glideシングルトンに必要な変換、プレースホルダー、アニメーションと一緒に渡すことだけです。
あなたや好奇心の強い人と話せてうれしいです。Bumpでさまざまなライブラリとやり取りするために幅広く使用しました。
http://blog.bignerdranch.com/3177-solving-the-Android-image-loading-problem-volley-vs-picasso/ (古いバージョンの比較)からいくつかの重要な情報を収集しましたピカソ2.0 vsボレー)
ピカソは完全に画像の読み込みに焦点を当てています。その結果、画像の読み込みプロセスに問題がある場合
一方、Volleyは、個別の小さなHTTPリクエストの処理に完全に集中しています。したがって、HTTPリクエストの処理に問題がある場合、Volleyにはおそらくフックがあります。一方、画像処理に癖がある場合、実際のフックはImageCacheのみです。何もないわけではありませんが、多くはありません。しかし、リクエストを定義すると、フラグメントやアクティビティ内からそれらを使用するのは簡単です。そして並列AsyncTasksとは異なり
ピカソはたった1つのことを行いますが、ボレーはより一般的な問題を解決しようとします。
Androidは高解像度画像をまったくうまく処理しません。 AndroidアプリでOutOfMemoryErrorをキャッチするパターンに少しこだわっています。それはばかげた戦術のようですが、ピカソのスケーリングや手間と比較して、いくつかの画像シナリオを確実に処理する唯一の方法はボレーです。大きな画像を正しくフィットします。ピカソはImageViewsの
scaleType
属性を考慮しません(最新バージョンで修正されているかどうかは不明です)。テスト例:ピカソバージョンと比較して、元の解像度の画像をサムネイルバージョンの代わりにロードするときに、VolleyがOutOfMemoryErrorをキャッチします(ピカソバージョンは爆発しません(OutOfMemoryErrorもキャッチします)が、ピカソは大きすぎるイメージをロードできません)。 。ボレーは爆破しないだけでなく、ボレーはこれらすべての大きな画像を表示します!!!。
によるとAndroid Hacker Koushik Dutta :
すべてのテストAndroid画像とhttpライブラリ
過去1週間にリリースされたいくつかのイメージロードライブラリと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
- UrlImage 7378/4525
- ボレー8292/7520
- Android-Universal-Image-Loader 14484/11243
- AQuery 11341/9637(これはUIスレッドをロックするようです...使用しないでください)
これがテストコードベースです: https://github.com/koush/AndroidNetworkBench
結論:これらのテストは決定的ではありません。多くの画像を使用して同時ネットワークアクセスをテストしました。確かに、ライブラリのテストにはそれだけではありません。たとえば、VolleyがActivityライフサイクルでどのように機能するかが好きです。他のライブラリはそれを行いません。
だから、あなたのボートが本当に浮くものは何でも。 I(Koush)ピカソのAPIでボレーが欲しい。
ボレーには、独自のディスクキャッシュ実装は含まれていません。 DiskLruCache(または、必要に応じてハイブリッドメモリ/ディスクキャッシュ)を取得し、Volley ImageCacheインターフェイスを実装する必要があります。
このブログ投稿では、Volleyでディスクベースのキャッシュを実装して画像を読み込む方法をまとめています。 http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-チュートリアル 。
Picasso
ライブラリを使用するだけです:
Picasso.get()
.load("/images/oprah_bees.gif")
.resize(50, 50)
.centerCrop()
.into(imageView)
これにより、特定のfile
をSD
からロードできるようになり、imageView
も渡すことができるため、この画像を設定できます。
To詳細機能を Picassoライブラリに読み込む
Vollyは、ディスク上のファイルをロードするためにも使用できます。
使用する:
networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);