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

Я использую залп, как это. Проблема в том, что 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, написанный Джейком Уортоном, и все работает нормально, но таким образом кэши существуют только на диске. Я хочу, чтобы Volley получил растровое изображение из памяти, если оно существует, иначе с диска, если оно существует, если для URL-адреса нет кеша, сделайте сетевой вызов.


person Alireza    schedule 26.11.2015    source источник


Ответы (1)


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

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

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

person Chenping Lu    schedule 27.11.2015