4

Android Volley (Google IO 2013) には、レベル 1 のキャッシュ用のビットマップ キャッシュと、レベル 2 用のディスク キャッシュがありますか。これがまたは選択なのか、どちらか/または選択なのかはわかりません。画像のディスクキャッシュとビットマップキャッシュのパフォーマンスについても疑問に思っています。ImageLoader はディスク キャッシュまたはビットマップ キャッシュのいずれかを使用しているように見えますが、レベル 1 およびレベル 2 のキャッシュがあることについてどこかで読んだことがあります ...

4

3 に答える 3

2

Volley はデフォルトで、ディスク (L2)ベースの http ヘッダーにすべてをキャッシュします。利用可能なキャッシュまたは TTL ヘッダーがない場合、ディスク キャッシュは発生しません。

キャッシングに関する質問がありましたが、ここで理解するのに役立つ回答があります。

ビットマップキャッシュについて。実際、このクラスは、メモリ キャッシュ (L1) である必要があるImageLoaderインターフェイスの実装を想定しています。この質問ImageCacheを参照してください。

于 2013-08-07T08:23:54.983 に答える
1

既定の Volley にはディスク キャッシュ (DiskBasedCache クラス) しかありませんが、独自のものを提供できます (com.android.volley.Cache インターフェイスを実装します)。Volley には「ビットマップ キャッシュ」という用語はありません。デフォルトでは、すべてのデータ (ビットマップ、テキストなど) がディスクにキャッシュされます。

于 2013-08-07T02:31:20.637 に答える
0

私はそれが古い質問であることを知っていますが、私は同じ問題を抱えていて、ブログを読んだり、ビデオを見たり、Volley ソースコードを上下にスクロールしたりして、最終的にそれを理解するのに数日かかりました. したがって、今後の参考のために、ここで説明する最も明確な方法を示します。

  • Volley は、応答のヘッダーに「no-cache」または「no-store」と明示的に記載されていない限り、すべての応答をキャッシュします。そうでない場合は、応答ヘッダーの「max-age」に従ってキャッシュされます。
  • 上記のキャッシング システムは 100% 理にかなっています。なぜなら、サーバーがサーバー側から各応答の有効期限を設定できるようにする場合、応答は有効ではないからです (これは素晴らしいことです)。
  • 上記のキャッシュ方法が気に入らない場合は、volley ソース コードのコードの対応する部分をオーバーライドできますが、強くお勧めしません。
  • 上記のすべては、LRU アルゴリズムを使用してディスクにキャッシュされ、L2 になります。そのため、ボレーにはすべてのリクエスト(画像を含む)に対してL2キャッシングが組み込まれています
  • ディスク キャッシュが I/O をブロックしています。したがって、ユーザーが ListView を非常に速くスワイプすると、画像が非常に速く読み込まれるはずですが、I/O がメイン スレッドをブロックし、スクロール中に迷惑なジャンプが発生するとします。次に、ノンブロッキング (メモリ内) L1 キャッシュが便利になり、ご覧のとおり、画像を処理するときに役立ちます。さて、Volley には組み込みの L1 キャッシュはありませんが、ImageLoader を使用する場合は、独自のコードを作成して ImageLoader にバインドできます。(気にしないでください。LruBitmapCache という名前ですでに何千ものものが利用可能です。1 つだけコピーしてください)
  • 結論: 応答に対して適切なキャッシュ データを送信するようにサーバーを設定し (これは非常に簡単です)、Volley で ImageLoader の LruBitmapCache を定義すれば、すべて完了です。L1 キャッシュと L2 キャッシュがあります。L1 がボレー チェックに失敗した場合は、L2 (ディスク) をチェックし、再び失敗した場合は RPC に進みます。

それが役に立てば幸い

于 2016-05-27T22:54:29.953 に答える