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