Залп кеширует только изображения в памяти, но я хочу кеш как на диске, так и в памяти

Я использую залп, как это. Проблема в том, что 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());

Примечание: я использовал DiskLruCache написано Джейком Уортоном и все работает нормально, но в этом случае кэши существуют только на диске. Я хочу, чтобы Волли получил растровое изображение из памяти, если он существует, в противном случае с диска, если он существует, если кеша для URL-адреса нет, выполните сетевой вызов.

1 ответ

Сначала залп пытается найти кеш в 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 и / или других заголовках с сервера.

Насколько я знаю, volley по умолчанию кэширует все запросы, несмотря на отсутствие Cache-Control или связанных заголовков. Однако кэши не будут использоваться, если такой заголовок не существует.

Если вы не хотите менять логику залпа, вы можете рассмотреть возможность поддержки кэша со стороны сервера.

Другие вопросы по тегам