0

ボレーはこんな感じで使っています。問題は、私の場合、Volley はイメージをメモリにキャッシュするだけで、ディスクにはキャッシュしないことです。アプリケーションを強制すると、すべてのキャッシュがメモリから削除されます。メモリとディスクの両方にキャッシュを設定するにはどうすればよいですか?

public ImageLoader getImageLoader() {
        getRequestQueue();
        if (mImageLoader == null) {
            mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache(getApplicationContext()));
        }
        return this.mImageLoader;
    }

holder.picture.setImageUrl(url, MyApplication.getInstance().getImageLoader());

注:私はDiskLruCacheJake Wharton によって書かれたものを使用しましたが、すべて正常に動作しますが、この方法では、キャッシュはディスク上にしか存在しません。Volleyにビットマップが存在する場合はメモリから取得し、存在する場合はディスクから取得し、URLのキャッシュがない場合はネットワーク呼び出しを行います。

4

1 に答える 1

0

Volley は最初に LruBitmapCache でキャッシュを見つけようとします。関連するコードが ImageLoader.java で見つかる場合があります。

Bitmap cachedBitmap = mCache.getBitmap(cacheKey);
if (cachedBitmap != null) {
    // Return the cached bitmap.
    ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null);
    imageListener.onResponse(container, true);
    return container;
}

その後、Volley は他の http リクエスト (ImageLoader を使用しない) と同じように進みます。つまり、DiskLruCache がデフォルトで使用されます。Volley は CacheDispatcher を使用して、ディスク上のキャッシュを処理します。キャッシュ戦略は、サーバーからの Cache-Control および/またはその他のヘッダーに基づいています。

私の知る限り、Cache-Control または関連するヘッダーがないにもかかわらず、ボレーはデフォルトですべてのリクエストをキャッシュします。ただし、そのようなヘッダーが存在しない場合、キャッシュは使用されません。

ボレーのロジックを変更したくない場合は、サーバーサイドからキャッシュをサポートすることを検討してください。

于 2015-11-27T10:09:41.417 に答える